Docker报错:OCI runtime exec failed: exec failed: container_linux.go:380: starting container process的解决方法

目录
  • 详细信息
  • 前言
  • 解析步骤
    • 1.首先,了解一些脚本的类型
    • 2.进入Tomcat容器内部,查Tomcat启动脚本解释器类型
  • 总结

详细信息

[root@centOS7 ~]# docker exec -it 3cae7605916d /bin/bash
OCI runtime exec failed: exec failed: container_linux.go:380: starting container process caused: exec: "/bin/bash": stat /bin/bash: no such file or directory: unknown

老规矩:先上答案 把脚本类型 /bin/bash,尝试换为 /bin/sh 试一下,如果你想对两种shell的区别有深入了解,点击这里。

注意:

如果你在Dockerfile中引用了自定义脚本,比如:entrypoint: ./entrypoint.sh,如果没有单独给该脚本通过chmod +x ./entrypoint.sh 添加执行权限,也可能会报这个错误。

前言

在docker学习中,大部分容器进入的脚本都是/bin/bash,比如tomcat,所以不假思索的认为其他容器进入方式的脚本类型也是/bin/bash,然而这是一个误区。

解析步骤

1.首先,了解一些脚本的类型

[root@centOS7 ~]cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/tcsh
/bin/csh
[root@centOS7 ~]# 

本机脚本解释器类型有4种。最常见的是前两种 (usr)/bin/sh和(usr)/bin/bash,还有一些不是很常见的脚本类型:ash、ksh、csh、zsh等,不同的shell都有自己的特点以及用途。

2.进入Tomcat容器内部,查Tomcat启动脚本解释器类型

docker exec -it tomcat /bin/bash
ls
cd bin && ls
cat cat startup.sh

不难发现,它的启动脚本解释器类型是/usr/bin/bash

3.进入Nginx容器内部,查Nginx启动脚本解释器类型

exit #退出tomcat容器
docker ps #查看正在运行的容器列表
docker exec -it 3cae7605916d /bin/sh  #进入nginx容器
cd /etc/init.d && ls
cat nginx  #并不是想要/bin/sh结果

发现,首行并不是想要的结果/bin/bash,不放弃继续找

find / -name nginx -type f   #仅查找nginx启动文件
find / -name nginx #过滤出目录下所有的nginx

最后的最后,怎么找nginx的启动脚本,期望能找到首行的解释器是/bin/sh,但是事与愿违,不是乱码就是/sbin/openrc-run。

总结

经过各种求教,得到的答案,nginx:alpine精简版,在做镜像的时候,只装了sh,没有装bash,所以用不了bash。shell类型有很多种,但是sh类型的shell是最基础的,所以大部分镜像都支持。这就不难理解为什么docker exec -it  可以使用 /bin/sh进入镜像内部了。

docker exec使用小技巧:后面的/bin/或者/usr/bin/可以省略掉,直接写sh 或者 bash。

到此这篇关于Docker报错:OCI runtime exec failed: exec failed: container_linux.go:380: starting container process解决的文章就介绍到这了,更多相关Docker报错:OCI runtime exec failed内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 安装Docker Desktop报错WSL 2 installation is incomplete的问题(解决报错)

    报错描述 我们安装Docker Desktop的时候,他会问我们是否需要使用WSL2(基于Windows的Linux子系统),如果我们不适用,就会使用Hyper-v虚拟机运行,不过相比于虚拟机,子系统在性能方面更加出色.在我们选择使用WSL2之后,并且我们也确定打开了如下图所示的Windows功能(如果没有打开,请先百度如何打开wsl.) 还是会出现一个下图所示的报错. 解决报错 更加报错提示,猜测可能是我们使用的wsl2版本老了,需要我们自己手动更新一下,我们根据提示去微软官网下载最新版的ws

  • Docker报错:OCI runtime exec failed: exec failed: container_linux.go:380: starting container process的解决方法

    目录 详细信息 前言 解析步骤 1.首先,了解一些脚本的类型 2.进入Tomcat容器内部,查Tomcat启动脚本解释器类型 总结 详细信息 [root@centOS7 ~]# docker exec -it 3cae7605916d /bin/bashOCI runtime exec failed: exec failed: container_linux.go:380: starting container process caused: exec: "/bin/bash": st

  • docker 报错 Exited (1) 4 minutes ago的原因分析

    docker 报错 1. 查看原因 docker logs nexus 2. 报错原因 OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000e7000000, 419430400, 0) failed; error='Cannot allocate memory' (errno=12) # # There is insufficient memory for the Java Runtime Environmen

  • 阿里云镜像安装docker报错的问题及解决方案

    问题 使用阿里云镜像安装docker时出现如下报错,具体如下图: Malformed entry 60 in list file /etc/apt/sources.list (Component) 解决方案 注意到报错提示/etc/apt/sources.list 这个文件第60行格式错误,那么尝试把这行注释掉.先打开这个文件: $ sudoedit /etc/apt/sources.list 再使用vim的语法进入编辑模式后,找到第60行的 deb [arch=amd64] https://d

  • Centos8安装docker报错(错误提示:All mirrors were tried)的问题

    Centos8从零安装Docker-ce 背景:我把服务器整个yum源的配置文件里的内容全删了. 因为我一直碰到“All mirrors were tried”的报错信息. 没错,一气之下 rm -rf /etc/yum.repos.d/* 全部!删了! 设备:腾讯云服务器 系统:CentOS 8.4 安装过程 # 注:如果当前不是root用户,请在命令头部加"sudo"(已经是root用户请忽略) # 第1步:重新构建yum源配置文件目录 # mkdir "创建目录&quo

  • Docker报错Operation not permitted问题的解决方法

    目录 前言 1)docker file 生成基本镜像,这个比较简单 2)容器内安装扩展包时,提示没有权限 3)容器内安装扩展包 4)扩展包里没有redis包,只能通过pecl安装. 5)使用当前容器生成镜像 总结 前言 Docker PHP需要安装 bcmath,pdo_mysql,redis3个扩展,由于权限问题,所以不能通过Dockerfile直接生成需要的镜像.这里分3部分来做,第一部分生成基本镜像,包含了可以用Dockerfile安装的PHP扩展.第二部分用镜像启动容器,手工安装扩展包最

  • mysql8报错:ERROR 1410 (42000): You are not allowed to create a user with GRANT解决办法

    1. 今天刚装了mysql8.0.13,试着分配几个账号和权限,结果报错: 2. 查资料得知mysql8的分配权限不能带密码隐士创建账号了,要先创建账号再设置权限 输入命令:Grant all privileges on test.* to 'test'@'%'; 又报错:You are not allowed to create a user with GRANT : 不允许使用grant命令,怎么会没权限,奇怪. 3.后来想到了mysql数据表user中的host 于是修改host:upda

  • PySide2出现“ImportError: DLL load failed: 找不到指定的模块”的问题及解决方法

    0 说明 系统: windows 10 python 3.6.7 1 情况 在windows系统下使用pip install PySid2安装PySide2模块的时候出现下面的错误: 分析情况: (1)可能安装的模块并不是完整的模块,存在丢失的情况,因此卸载pyside2之后再重新安装,但是并没有什么作用,仍然还是报这个错误 (2)通过上网查询一些资料,发现使用pip安装的模块都是安装最新的模块,可能存在python版本和PySide2版本不相符的情况发生,因此在使用pip安装模块的时候,给模块

  • CentOS版本问题安装Docker报错的解决方案

    1. 版本信息 # cat /etc/system-release CentOS Linux release 7.2.1511 (Core) # uname -a Linux k8s-daniel-3 3.10.0-327.28.3.el7.x86_64 #1 SMP Thu Aug 18 19:05:49 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux 2. Docker的安装和错误 直接使用yum -y install docker进行安装, 然后无法启动.

  • 嵌入式移植docker报错问题(汇总)

    经过了漫长时间的移植和查询资料,得以解决一下嵌入式docker出现的问题,很多网上的资料全都是复制粘贴复制粘贴,找不到合适的解决方法让人很是苦恼,希望自己总结出的一些解决问题的经验给广大朋友减少一些负担吧! 1.standard文件找不到: 解决方法: tar zcvf xtables /usr/lib64/xtables cp xtables.tar /work/initramfs/ 需要到同内核同系统的另一台服务器打包在解压 2.需要iptables支持才能启动docker,移植iptabl

  • apache启动报错:the requested operation has failed解决办法

    原因一:80端口占用 例如IIS,另外就是迅雷.我的apache服务器就是被迅雷害得无法启用! 原因二:软件冲突 装了某些软件会使apache无法启动如Dr.com 你打开网络连接->TcpIp属性->高级->WINS标签 把netbios的lmhosts对勾去掉,禁用tcp/ip的netbios. 然后再启动应该就可以了. 原因三:httpd.conf配置错误 如果apache的配置文件httpd.conf搞错了,在windows里启动它,会提示the requested operat

随机推荐