Docker报错OCI runtime exec failed: exec failed: unable to start container process: exec: “/bin/bash“解决

报错

进入容器时,报如下错误:

[root@iZhp33j6fklnmhbf0lz2obZ admin]# docker exec -it admin_web_1 /bin/bash
OCI runtime exec failed: exec failed: unable to start container process: exec: "/bin/bash": stat /bin/bash: no such file or directory: unknown

解决

将 /bin/bash换成 /bin/sh成功

[root@iZhp33j6fklnmhbf0lz2obZ admin]# docker exec -it admin_web_1 /bin/sh
/code # ls
Dockerfile          app.py              bak                 docker-compose.yml  index.html

分析

制作镜像时使用了精简版,只装了sh命令,未安装bash。
如下都是精简版:

redis:alpine FROM
python:3.6-alpine

小拓展

Shell简介

Shell是一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。

sh(Bourne Shell)是一个早期的重要shell,1978年由史蒂夫·伯恩编写,并同Version 7 Unix一起发布。
bash(Bourne-Again Shell)是一个为GNU计划编写的Unix shell。1987年由布莱恩·福克斯创造。主要目标是与POSIX标准保持一致,同时兼顾对sh的兼容,是各种Linux发行版标准配置的Shell,在Linux系统上/bin/sh往往是指向/bin/bash的符号链接。

含义:

#! 是一个特殊标记,说明这是一个可执行的脚本。除了第一行,其他以#开头的都不再生效,为注释。
#! 后面是脚本的解释器程序路径。这个程序可以是shell,程序语言或者其他通用程序,常用的是bash、sh。

#!/bin/bash
#!/bin/sh

查看

查看系统可使用的shell类型

cat /etc/shells    
[root@iZhp33j6fklnmhbf0lz2obZ admin]#  cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash

查看当前默认设置,一般在第一行

cat /etc/passwd    
[root@iZhp33j6fklnmhbf0lz2obZ admin]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash

查看当前sh状态

ll /bin/sh   

查看当前bash状态

ll /bin/bash  
[root@iZhp33j6fklnmhbf0lz2obZ admin]# ll /bin/sh
lrwxrwxrwx. 1 root root 4 Nov  9  2019 /bin/sh -> bash
[root@iZhp33j6fklnmhbf0lz2obZ admin]# ll /bin/bash
-rwxr-xr-x. 1 root root 1219248 Nov  9  2019 /bin/bash

sh与bash区别:

sh 遵循POSIX规范:“当某行代码出错时,不继续往下解释”。bash 就算出错,也会继续向下执行。

sh 脚本:

#!/bin/sh
source err
echo "hello"

bash 脚本:

#!/bin/bash
source err
echo "hello2"

输出结果:

[root@iZhp33j6fklnmhbf0lz2obZ admin]# bash hello2.sh 
hello2.sh: line 2: err: No such file or directory
hello2
[root@iZhp33j6fklnmhbf0lz2obZ admin]# sh hello.sh 
hello.sh: line 2: source: err: file not found
[root@iZhp33j6fklnmhbf0lz2obZ admin]# bash --posix hello2.sh 
hello2.sh: line 2: source: err: file not found

小结

sh 跟bash的区别是bash是否开启POSIX模式。
sh是bash的一种特殊的模式,sh就是开启了POSIX标准的bash, /bin/sh 相当于 /bin/bash --posix。
在Linux系统上/bin/sh往往是指向/bin/bash的符号链接

ln -s /bin/bash /bin/sh

在这里插入图片描述
点赞 收藏 关注

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三省同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值