私は完全にdockerの初心者です。私は次のように終了したコンテナを開始しようとしました、
docker ps -a
を使用して、使用可能なすべてのコンテナーをリストしました。以下をリストしました、 次のコマンドを入力して、終了した段階にあるコンテナーを開始し、そのイメージのターミナルに入ります。
docker start 79b3fa70b51d
docker exec -it 79b3fa70b51d \bin\sh
次のエラーがスローされています。
FATA[0000] Error response from daemon: Container 79b3fa70b51d is not running
しかし、docker start 79b3fa70b51d
を使用してコンテナを起動すると。すべてが正常に機能する場合、正常な出力としてコンテナIDをスローします。このエラーの原因はわかりません。原因についての考えやこれに関する提案は私にとって非常に役立つでしょう。前もって感謝します。
コンテナ79b3fa70b51d
はecho
のみを実行するようです。
つまり、起動してエコーし、すぐに終了します。
次の docker exec
command は、コンテナにアタッチしてコマンドを実行するために実行されていることを検出しません。手遅れです。コンテナは既に終了しています。
docker exec
コマンドは、実行中のコンテナーで新しいコマンドを実行します。
docker exec
を使用して開始されたコマンドは、コンテナーのプライマリプロセス(PID 1)の実行中にのみ実行されます
デフォルトでは、コンテナで実行されているタスクがない場合、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:/#
メインプロセスを再度開始できない場合(十分な時間)、コンテナを新しいイメージに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:/#
まず、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:/#
その理由は、受け入れられた答えがまさに言ったことです。この問題についてさらに理解を深めるための追加情報を追加します。
Created
、Running
、Stopped
、Exited
、Dead
など、私が知っているものが含まれます。docker create
を実行すると、dockerデーモンはCreated
のステータスでコンテナを作成します。docker start
の場合、dockerデーモンは、そのステータスがCreated
またはStopped
である既存のコンテナを起動します。docker run
を実行すると、dockerデーモンはdocker create
とdocker start
の2つのステップで終了します。docker stop
の場合、明らかにdockerデーモンはコンテナを停止します。したがって、コンテナはStopped
ステータスになります。Exited
になります。プロセスはいつ終了しますか?別の言葉で、プロセスは何ですか、どのように開始しましたか?
答えは、DockerfileのCMD
または次の式のcommand
です。これは、一部の画像ではデフォルトでbash
です。
docker run ubuntu:18.04 [command]