Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker 错误:无法启动容器:stat/bin/sh:没有这样的文件或目录";_Docker_Busybox - Fatal编程技术网

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

Docker 错误:无法启动容器:stat/bin/sh:没有这样的文件或目录";,docker,busybox,Docker,Busybox,我一直在尝试创建自己的busybox基础映像 # ./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 '--tra

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

# ./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提供的图像

# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
pensu/busybox       latest              8eac78bfc9d6        7 seconds ago       2.476 MB
但当我尝试执行docker run时,总是会出现错误:

# 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" 

我不明白为什么它会犯这样的错误?我做错什么了吗?除此之外,我如何验证我正在创建一个处于工作状态的正确映像?

您在/bin/sh处没有外壳?您是否尝试过docker run-it pensu/busybox/usr/bin/sh?

创建图像后,请使用以下工具进行检查:

$ docker inspect $image_name 
并检查CMD选项中的内容。对于忙盒,它应该是:

"Cmd": [
     "/bin/sh"
]

可能您正在覆盖./mkimage.sh中的CMD选项,并在docker文件中明确提到您试图运行的ubuntu版本

FROM ubuntu:14.04
不要使用ubuntu:Latest中的like
。这解决了我上面的“无法启动容器:stat/bin/sh:没有这样的文件或目录”问题

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

docker exec -it 80372bc2c41e /bin/bash
解决方案是确定容器上可用的终端(或外壳)类型。为此,我跑了:

docker inspect 80372bc2c41e
在该命令的输出中,我看到:

"Cmd": [
    "/bin/sh",
    "-c",
    "gunicorn -b 0.0.0.0:7082 server.app:app"
],
这告诉我有一个可用的
/bin/sh
命令,我可以连接:

docker exec -it 80372bc2c41e /bin/sh
这个错误

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

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

ENV EXECUTABLE hello
cmd [$EXECUTABLE]
在docker文件中,docker使用/bin/sh解析输入字符串。这就是错误。检查图像时,您会发现:

$docker inspect <image-name>
"Entrypoint": [
                "/bin/sh",
                "-c",
                "[$HM_APP]"
            ]
并再次检查图像:

"Entrypoint": [
                "hello"
            ]
这消除了docker应用程序现在可以执行二进制文件对/bin/sh的依赖。例如:

FROM scratch

# Environmental variables

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

EXPOSE 8083
ENTRYPOINT ["hospitalms"]

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

我也有类似的问题:

docker: Error response from daemon: OCI runtime create failed: container_linux.go:346: starting container process caused "exec: \"sh\": executable file not found in $PATH": unknown.
在我的情况下,我知道图像在其他地方工作,然后是一个损坏的本地图像。 我解决了删除图像(
docker rmi
)并再次拖动图像(
docker pull
)的问题

我也对docker系统进行了修剪,但我认为这不是强制性的。

在使用docker工具箱/机器的Windows(msys)上,我必须在
/bin/bash
之前添加一个额外的
/
,以指示它是*nix文件路径

所以,
docker run--rm-it:latest//bin/bash

使用命令
docker inspect image\u name
检查图像
cmd
。输出可能如下所示:

"Cmd": [
    "/bin/bash",
    "-c",
    "#(nop) ",
    "CMD [\"/bin/bash\"]"
],
"Cmd": [
    "/bin/sh",
    "-c",
    "#(nop) ",
    "CMD [\"/bin/sh\"]"
],
因此,请使用命令
docker exec-it container\u id/bin/bash
。如果您的
cmd
输出与此不同:

"Cmd": [
    "/bin/bash",
    "-c",
    "#(nop) ",
    "CMD [\"/bin/bash\"]"
],
"Cmd": [
    "/bin/sh",
    "-c",
    "#(nop) ",
    "CMD [\"/bin/sh\"]"
],

在上面的命令中使用
/bin/sh
而不是
/bin/bash

使用
$docker inspect
如果图像在输出中没有
/bin/bash
,您可以使用下面的命令:它对我非常有效

$ docker exec -it <container id> sh
$docker exec-it sh

“Cmd”:[“/bin/sh”、“-c”、“#(nop)ADD file:905ed83e56295de9b6eb24708b583e78e4e9a06d3a80184276b55b5db04d70aa in/”],仅为/bin/sh。如果要运行容器,必须提供将由容器执行的任务,rigth现在docker正在执行/bin/sh。例如,如果您想在容器中运行jar,请尝试java-jar yourjar.jar,这就是我的想法。不可能得到一个带有busybox映像的交互式shell吗?busybox容器中还能运行什么?@wsl,这个链接是关于在docker中运行Java的。这个问题与Java无关。上面的评论说
“Cmd:[“/bin/sh”、“-c”、“#(nop)ADD file:905ed83e56295de9b6eb24708b583e78e4e9a06d3a80184276b55b5db04d70aa in/”
-注意
添加
的内容;你的
Dockerfile
中有一个输入错误。是的,我有。这是同样的结果。
从Docker 1.5.0开始(特别是Docker/Docker#8827),从头开始在Docker文件中是不允许的。使用scratch“image”向构建过程发出信号,表示您希望Dockerfile中的下一个命令成为映像中的第一个文件系统层。
这意味着您的容器不包含/bin/sh或任何其他内容(我假设linux内核除外)是的,您没有将内核附加到映像。运行任何Linux命令或依赖docker shell的命令都将失败。如果CMD部分中有null,该怎么办?嗯,这意味着容器中没有正在运行的命令。你有Dockerfile的链接吗?多棒的小把戏啊。我不知道这件事。