web-dev-qa-db-ja.com

エラー:コンテナを開始できません:stat / bin / sh:そのようなファイルまたはディレクトリはありません

私は独自の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リポジトリで画像が利用できることがわかります。

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

なぜエラーが発生するのか理解できません。私は何か間違ったことをしていますか?他にどのようにして、動作状態の正しい画像を作成していることを検証できますか?

26
Pensu

イメージを作成したら、次の方法で確認します。

$ docker inspect $image_name 

cMDオプションの内容を確認してください。ビジーボックスの場合は、次のようになります。

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

多分あなたはあなたの./mkimage.shのCMDオプションを上書きしています

29
wsl

次のコマンドを実行すると、このエラー(「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
16
duhaime

このエラー

docker:デーモンからのエラー応答:OCIランタイムの作成に失敗しました:container_linux.go:348:コンテナープロセスを開始すると "exec:\"/bin/sh\":stat/bin/sh:no such file or directory":不明。

たとえば、ベースイメージからDockerイメージを作成するときに発生します。 scratch。これは、結果の画像に画像を実行するためのシェルがないためです。使用する場合:

ENV EXECUTABLE hello
cmd [$EXECUTABLE]

dockerファイルでは、dockerは/ bin/shを使用して入力文字列を解析します。したがって、エラー。画像を検査すると、次のことがわかります。

$docker inspect <image-name>
"Entrypoint": [
                "/bin/sh",
                "-c",
                "[$HM_APP]"
            ]

これは、ENTRYPOINTまたはCMD引数が/ bin/sh -cを使用して解析されることを意味します。私にとってうまくいった解決策は、コマンドを文字列のJSON配列として解析することです。

cmd ["hello"]

そして再び画像を検査します:

"Entrypoint": [
                "hello"
            ]

これにより、/ bin/shへの依存がなくなり、Dockerアプリでバイナリファイルを実行できるようになります。例:

FROM scratch

# Environmental variables

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

EXPOSE 8083
ENTRYPOINT ["hospitalms"]

これが将来誰かを助けることを願っています。

11
MUNGAI NJOROGE

私は同様の問題を抱えていました:

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 <imagename>)そして再びそれを引っ張ります(docker pull <imagename>)。

docker system Pruneも必須ではありません。

1
ton

実行しようとしているdockerファイルでubuntuのバージョンを明示的に言及し、

FROM ubuntu:14.04

FROM ubuntu:Latestのように使用しないでください。これにより、上記の「コンテナを開始できません:stat/bin/sh:そのようなファイルまたはディレクトリはありません」の問題が解決しました

1
Poovalagan Jag

/ bin/shにシェルがありませんか?やってみました docker run -it pensu/busybox /usr/bin/sh

0
Miglen.com