終了したDockerコンテナを続行する方法


263

考慮してください:

docker run -it centos /bin/bash

Ctrl+ を押しDて終了します。

このコンテナを引き続き実行したいのですが、実行できないことがわかりました。

唯一の方法は

docker commit `docker ps -q -l` my_image
docker run -it my_image /bin/bash

私は正しいですか?より良い方法はありますか?(私はdocker 0.8.0を使用しています。)


1
コンテナーに名前を割り当て、その名前を使用してコンテナーを制御しようとしましたか?ちなみに、「exit it」とは、そこから離れるという意味ですか?
エリックプラトン

12
Docker プログラミング用のツールです。少なくとも私はそれを使用しています。多数派が同意しない場合は、誰かが質問をする場所としてStackOverflowを指さないようにDockerに指示する必要があります。これは、ここかSuperUserのどちらにも当てはまる最初の「DevOps」のような質問ではないと思います。
テッドM.ヤング

5
Dockerは開発者ツールです。ここにはすでに「ドッカー」タグがあります。したがって、stackoverflowで質問するのが適切だと思います。クリーンな環境からのビルドが必要なイメージのビルドに使用します。
Daniel YC Lin

6
これを「オフトピック」とタグ付けした人に、理由を説明してほしい!
jpetazzo 2014

2
トピックから外れていないものとしてこの質問をサポートするには:meta.stackoverflow.com/q/276579/210336meta.stackoverflow.com/q/271279/210336
Matthijs Wessels

回答:


291

既存のコンテナは、終了して変更がまだ残っている後に再起動できます。

docker start  `docker ps -q -l` # restart it in the background
docker attach `docker ps -q -l` # reattach the terminal & stdin

3
:1行として簡単に docker start `docker ps -q -l` && docker attach `docker ps -q -l`
ダニエル・YC林

7
1行に要約するには:docker start -i $(docker ps -q -l)。;-)ネーミングは、選択されるコンテナをより適切に制御するのに役立ちます。-l最後に、[OK]を...得る
エリックプラトン

103
Linuxの初心者にとっては、`docker ps -q -l`ビットは拡張です。最後に作成された(-l)DockerコンテナーのIDに置き換えられます。-qは通常、によって出力される他の情報(idの横にある)を抑制し `docker ps`ます。---- 注: バックティックは引用符ではなく、非常に特別な意味を持っています。あなたはバッククォートの間で入力すべてがメインコマンドの前にシェルによって評価(実行)される- unix.stackexchange.com/questions/27428/...
bnieland

1
コンテナCreated...がで起動できない状態になっているのを見つけましたdocker start ...。ただし、次を使用して再起動できますdocker restart ...
Voltaire

2
注:-l「最新」のDockerのみを取得します。あなたが私のようなdocker ps -aもので、起動する必要があるものが複数ある場合は、上記のコマンドをに変更することで、それらの「すべて」(-a)を再起動できますdocker start `docker ps -q -a`-q単に「静か」にします(出力ログではありません)。
ロックリー

148
docker start -a -i `docker ps -q -l`

説明:

docker startコンテナを起動(名前またはIDが必要です)
-aを容器に取り付け
-iインタラクティブモード
docker ps一覧コンテナ
-qのみコンテナIDが一覧表示
-lのみ、最後の作成したリストのコンテナを


docker ps -q -l、それが開始ステータスであっても、最後に作成されたもののコンテナーIDを提供します。
ダーマン

コンテナへのいわゆる「アタッチ」とは何ですか?「アタッチ」?
スカイツリー

49

使用する:

docker start $(docker ps -a -q --filter "status=exited")

これにより、終了状態にあるすべてのコンテナーが開始されます。

docker exec -it <container-id> /bin/bash

これは特定のコンテナに接続します。


2
これが私にとって有効な唯一のものであることがわかりました。その重要なセカンドラインのために。docker exec -it <container id> /bin/bash(または単にbash)。
barlop、2018

これは私にとってはうまくいきましたが、2つのコンテナーがあったので、2回実行する必要がありました。したがって、最初のものが開始し、2番目のものがエラーを受け取った場合。同じコマンドをもう一度押すだけで、次のコンテナが開始されます。
Andrija J Fourkidney 2018年

20

複数の覚えやすいコマンドで実行する場合:

  1. 停止したコンテナのリスト:

docker ps -a

  1. アタッチするコンテナーの名前またはコンテナーIDをコピーし、次のコマンドでコンテナーを開始します。

docker start -i <name/id>

この-iフラグは、コンテナーの標準入力に接続するようにdockerに指示します。

コンテナーが接続する対話型シェルで開始されていない場合は、これを実行してシェルを実行する必要があります。

docker start <name/id>
docker exec -it <name/id> /bin/sh

/bin/sh高山ベースのイメージで通常利用できるシェルです。


過小評価されている答え、これは私が探していたコンテナをこの質問の「答え」よりもはるかに簡単に見つけるのに役立ちました。
ニコラスラブレク

3
Error response from daemon: Container <id> is not running
セリン

14

既知の名前のDockerコンテナーを1つだけ続行する場合:

docker start  `docker ps -a -q --filter "name=elas"`

1
@Nelsonに感謝します。これは、特定のドッカーを開始するのに非常に役立ちます
SACHIN CHAVAN

この場合docker start <name>、<name>がコンテナーの名前である場所で実行できます。少なくともdocker v19.03.8を使用
Don Foumare

13

次の手順を実行します:

  1. 以下のコマンドを実行して、すべてのコンテナサービスが実行中と停止中の両方であることを確認します。-aコンテナも停止することを確認するオプションが提供されます

    docker ps -a
    
  2. 次に、container_idまたはコンテナタグ名でDockerコンテナを開始します

    docker start <CONTAINER_ID> or <NAMES>
    

    ここに画像の説明を入力してください

    上の画像から言うと、コンテナID 4b161b302337
    なので、実行するコマンドは

    docker start 4b161b302337
    
  3. コンテナが実行されているかどうかを確認できます

    docker ps
    

9

名前付きコンテナがある場合は、次のコマンドを実行して開始できます

docker container start container_name

ここで、container_nameは、コンテナーの作成時に指定する必要があるコンテナーの名前です。container_nameコンテナーに名前が付けられていない場合は、コンテナーIDで置き換えることができます。コンテナIDは、次のコマンドを実行して見つけることができます。

docker ps -a

5

これらのコマンドは、どのコンテナでも機能します(最後に終了したものだけではありません)。この方法は、システムを再起動した後でも機能します。そのために、これらのコマンドは「コンテナーID」を使用します。

手順:

  1. このコマンドを使用してすべてのドッカーを一覧表示し、再起動するコンテナのコンテナIDをメモします。 docker ps -a

  2. コンテナーIDを使用してコンテナーを開始します。 docker start <container_id>

  3. コンテナーを接続して実行します。 docker attach <container_id>

注:Linuxで動作します


1

名前で

sudo docker start bob_the_container

またはIDによって

sudo docker start aa3f365f0f4e

これは停止したコンテナーを再起動します。-iを使用してコンテナーのSTDINをアタッチするか、-iの代わりにコンテナーセッションにアタッチできます(-itを使用して実行する場合)

sudo docker attach bob_the_container

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.