web-dev-qa-db-ja.com

Docker-コンテナーが実行されていません

私は完全にdockerの初心者です。私は次のように終了したコンテナを開始しようとしました、

  1. docker ps -aを使用して、使用可能なすべてのコンテナーをリストしました。以下をリストしました、 docker list all images
  2. 次のコマンドを入力して、終了した段階にあるコンテナーを開始し、そのイメージのターミナルに入ります。

    docker start 79b3fa70b51ddocker exec -it 79b3fa70b51d \bin\sh

  3. 次のエラーがスローされています。

    FATA[0000] Error response from daemon: Container 79b3fa70b51d is not running

しかし、docker start 79b3fa70b51dを使用してコンテナを起動すると。すべてが正常に機能する場合、正常な出力としてコンテナIDをスローします。このエラーの原因はわかりません。原因についての考えやこれに関する提案は私にとって非常に役立つでしょう。前もって感謝します。

58
Stranger

コンテナ79b3fa70b51dechoのみを実行するようです。

つまり、起動してエコーし、すぐに終了します。

次の docker exec command は、コンテナにアタッチしてコマンドを実行するために実行されていることを検出しません。手遅れです。コンテナは既に終了しています。

docker execコマンドは、実行中のコンテナーで新しいコマンドを実行します。

docker execを使用して開始されたコマンドは、コンテナーのプライマリプロセス(PID 1)の実行中にのみ実行されます

18
VonC

デフォルトでは、コンテナで実行されているタスクがない場合、Dockerコンテナはすぐに終了します。

コンテナをバックグラウンドで実行し続けるには、--detach(または-d)引数を指定して実行してみてください。

たとえば:

docker pull debian

docker run -t -d --name my_debian debian
e7672d54b0c2

docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
e7672d54b0c2        debian              "bash"              3 minutes ago       Up 3 minutes                            my_debian

#now you can execute command on the container
docker exec -it my_debian bash
root@e7672d54b0c2:/# 
36
Dio Phung

メインプロセスを再度開始できない場合(十分な時間)、コンテナを新しいイメージにcommitして、このイメージから新しいコンテナを実行することもできます。これは通常のベストプラクティスワークフローではありませんが、失敗するスクリプトをたまにデバッグすることは非常に便利です。

docker exec -it 6198ef53d943 bash
Error response from daemon: Container 6198ef53d9431a3f38e8b38d7869940f7fb803afac4a2d599812b8e42419c574 is not running

docker commit 6198ef53d943
sha256:ace7ca65e6e3fdb678d9cdfb33a7a165c510e65c3bc28fecb960ac993c37ef33

docker run -it ace7ca65e6e bash
root@72d38a8c787d:/#
10
Matthias Kuhn

まず、Dockerコンテナを起動する必要があります

ankit@ankit-HP-Notebook:~$  Sudo docker start 3a19b39ea021

                        3a19b39ea021

その後、Dockerコンテナを確認します。

ankit@ankit-HP-Notebook:~$  Sudo docker ps -a

 CONTAINER ID        IMAGE                         COMMAND             CREATED             STATUS                   PORTS               NAMES

  3a19b39ea021        coreapps/ubuntu16.04:latest   "bash"              13 hours ago        
  Up 9 seconds                                 ubuntu1

  455b66057060        hello-world                   "/hello"            4 weeks ago         

Exited (0) 4 weeks ago                       vigorous_bardeen

次に、以下のコマンドを使用して実行します。

ankit@ankit-HP-Notebook:~$  Sudo docker exec -it 3a19b39ea021 bash

root@3a19b39ea021:/# 
5
Ankit gupta

その理由は、受け入れられた答えがまさに言ったことです。この問題についてさらに理解を深めるための追加情報を追加します。

  1. コンテナのステータスには、CreatedRunningStoppedExitedDeadなど、私が知っているものが含まれます。
  2. docker createを実行すると、dockerデーモンはCreatedのステータスでコンテナを作成します。
  3. docker startの場合、dockerデーモンは、そのステータスがCreatedまたはStoppedである既存のコンテナを起動します。
  4. docker runを実行すると、dockerデーモンはdocker createdocker startの2つのステップで終了します。
  5. docker stopの場合、明らかにdockerデーモンはコンテナを停止します。したがって、コンテナはStoppedステータスになります。
  6. 最も重要なものとして、コンテナは実際に長い時間のプロセスを保持していることを想像します。プロセスが終了すると、コンテナを保持しているプロセスも終了します。したがって、このコンテナのステータスはExitedになります。

プロセスはいつ終了しますか?別の言葉で、プロセスは何ですか、どのように開始しましたか?
答えは、DockerfileのCMDまたは次の式のcommandです。これは、一部の画像ではデフォルトでbashです。

docker run ubuntu:18.04 [command]
1
Light.G