首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误:无法启动容器: stat /bin/sh:没有这样的文件或目录“

错误:无法启动容器: stat /bin/sh:没有这样的文件或目录“
EN

Stack Overflow用户
提问于 2015-04-09 17:43:27
回答 9查看 147.7K关注 0票数 47

我一直在尝试创建我自己的busybox基础镜像。

代码语言:javascript
复制
# ./mkimage.sh -t pensu/busybox busybox-static
+ mkdir -p /var/tmp/docker-mkimage.US3tHy0uBQ/rootfs
+ tar --numeric-owner -caf /var/tmp/docker-mkimage.US3tHy0uBQ/rootfs.tar.xz -C /var/tmp/docker-mkimage.US3tHy0uBQ/rootfs '--transform=s,^./,,' .
+ cat > '/var/tmp/docker-mkimage.US3tHy0uBQ/Dockerfile'
+ rm -rf /var/tmp/docker-mkimage.US3tHy0uBQ/rootfs
+ docker build -t pensu/busybox /var/tmp/docker-mkimage.US3tHy0uBQ
Sending build context to Docker daemon 863.2 kB
Sending build context to Docker daemon 
Step 0 : FROM scratch
 ---> 
Step 1 : ADD rootfs.tar.xz /
 ---> 8eac78bfc9d6
Removing intermediate container ad9bbb8f7536
Successfully built 8eac78bfc9d6
+ rm -rf /var/tmp/docker-mkimage.US3tHy0uBQ

我可以在我的docker repo中看到这张图片。

代码语言:javascript
复制
# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
pensu/busybox       latest              8eac78bfc9d6        7 seconds ago       2.476 MB

但是当我尝试运行docker时,我总是得到这样的错误:

代码语言:javascript
复制
# docker run -it pensu/busybox /bin/sh
exec: "/bin/sh": stat /bin/sh: no such file or directorytime="2015-04-09T16:03:45+05:30" level="fatal" msg="Error response from daemon: Cannot start container 8fe73b7832193c847d7975175a4be86d1f0b550b6a00b812bd4cdd18fe752468: exec: \"/bin/sh\": stat /bin/sh: no such file or directory" 

我不能理解为什么它会给出那个错误?我做错了什么吗?否则,我如何验证我创建的是处于工作状态的正确映像?

EN

回答 9

Stack Overflow用户

发布于 2015-04-09 17:54:43

创建镜像后,使用以下命令进行检查:

代码语言:javascript
复制
$ docker inspect $image_name 

并检查您在CMD选项中有什么。对于繁忙的盒子,它应该是:

代码语言:javascript
复制
"Cmd": [
     "/bin/sh"
]

也许您正在覆盖./mkimage.sh中的CMD选项

票数 63
EN

Stack Overflow用户

发布于 2018-03-24 11:09:27

在运行命令时,我遇到了这个错误("stat /bin/bash:没有这样的文件或目录“):

代码语言:javascript
复制
docker exec -it 80372bc2c41e /bin/bash

解决方案是识别容器上可用的终端(或shell)的类型。为此,我运行:

代码语言:javascript
复制
docker inspect 80372bc2c41e

在该命令的输出中,我看到:

代码语言:javascript
复制
"Cmd": [
    "/bin/sh",
    "-c",
    "gunicorn -b 0.0.0.0:7082 server.app:app"
],

这告诉我有一个/bin/sh命令可用,并且我能够连接到:

代码语言:javascript
复制
docker exec -it 80372bc2c41e /bin/sh
票数 36
EN

Stack Overflow用户

发布于 2018-10-13 05:41:55

此错误

docker:来自守护进程的错误响应: OCI运行时创建失败: container_linux.go:348:启动容器进程导致"exec:\“//sh\”:stat /bin/sh:没有此类文件或目录“:未知。

从基本映像创建docker映像时发生,例如。scratch。这是因为生成的映像没有用于执行该映像的shell。如果您使用:

代码语言:javascript
复制
ENV EXECUTABLE hello
cmd [$EXECUTABLE]

在docker文件中,docker使用/bin/sh解析输入字符串。也因此产生了错误。查看图像,您会发现:

代码语言:javascript
复制
$docker inspect <image-name>
"Entrypoint": [
                "/bin/sh",
                "-c",
                "[$HM_APP]"
            ]

这意味着将使用/bin/sh -c解析入口点或CMD参数。对我有效的解决方案是将命令解析为JSON字符串数组,例如

代码语言:javascript
复制
cmd ["hello"]

并再次检查图像:

代码语言:javascript
复制
"Entrypoint": [
                "hello"
            ]

这消除了对/bin/sh的依赖,docker应用程序现在可以执行二进制文件。示例:

代码语言:javascript
复制
FROM scratch

# Environmental variables

# Copy files
ADD . /
# Home dir
WORKDIR /bin

EXPOSE 8083
ENTRYPOINT ["hospitalms"]

希望这对将来的人有所帮助。

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29535015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档