1. ホーム

[解決済み】"docker run -d "の後、Dockerコンテナが自動的に停止する。

2022-03-24 20:18:01

質問

これまで読んだチュートリアルによると、".を使用するようです。 docker run -d とすると、イメージからコンテナが起動し、コンテナはバックグラウンドで実行されます。このように、すでにコンテナIDがあることがわかります。

root@docker:/home/root# docker run -d centos
605e3928cdddb844526bab691af51d0c9262e0a1fc3d41de3f59be1a58e1bd1d

しかし、もし私が" docker ps "は、何も返されませんでした。

そこで、"を試してみました。 docker ps -a "、コンテナはすでに終了していることがわかります。

root@docker:/home/root# docker ps -a
CONTAINER ID        IMAGE                 COMMAND             CREATED             STATUS                         PORTS               NAMES
605e3928cddd        centos:latest         "/bin/bash"         31 minutes ago      Exited (0) 31 minutes ago                          kickass_swartz

何か間違ったことをしましたか?この問題のトラブルシューティングはどうすればいいのでしょうか?

解決方法は?

その Centos dockerfile は、デフォルトのコマンド bash .

つまり、バックグラウンドで実行された場合( -d を使用すると、シェルは直ちに終了します。

2017年の更新情報

最近のdockerは、コンテナの実行を デタッチドモード フォアグラウンドモード ( -t , -i または -it )

この場合、追加のコマンドは必要なく、これだけで十分です。

docker run -t -d centos

bashはバックグラウンドで待機します。

で当初報告されていたことです。 カルヤニ・チャウドハリ 's 回答 で詳しく説明しています。 ジャージ豆 's 回答 .

vonc@voncvb:~$ d ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
4a50fd9e9189        centos              "/bin/bash"         8 seconds ago       Up 2 seconds                            wonderful_wright

ただし アルパイン , マリノス・アン レポート コメントで :

docker run -t -d alpine/git はプロセスを維持しません。

しなければならなかった。 docker run --entrypoint "/bin/sh" -it alpine/git


オリジナル回答(2015年)

で述べたように この記事 :

で実行するのではなく docker run -i -t image your-command を使用すると -d を打つことでコンテナの端末を切り離す必要がなくなり、1つのコマンドでコンテナを実行できるようになるため、推奨されています。 Ctrl + P + Q .

ただし -d オプションを使用します。 フォアグラウンドでコマンドを実行し続けない限り、コンテナはすぐに停止します。 .

Dockerは、コマンドをフォアグラウンドで実行し続けることを要求します。そうしないと、アプリケーションが停止したとみなされ、コンテナがシャットダウンしてしまいます。

<ブロッククオート

問題は、あるアプリケーションがフォアグラウンドで実行されないことです。どうすれば簡単にできるでしょうか?

<ブロッククオート

このような場合、以下のように tail -f /dev/null をコマンドに追加してください。

こうすることで、メインのコマンドがバックグラウンドで実行されても、tailがフォアグラウンドで実行され続けるので、コンテナが停止することはない。

ということは、これならうまくいきそうですね。

docker run -d centos tail -f /dev/null

またはDockerfileで。

ENTRYPOINT ["tail"]
CMD ["-f","/dev/null"]

A docker ps を選択すると、centosコンテナがまだ動作していることが表示されます。

そこから、あなたは アタッチまたはデタッチする (または docker exec コマンドもあります)。