停止したDockerコンテナを再起動する方法


89

次のコマンドを使用して、イメージからDockerコンテナーを起動します。

$ docker run -d myimage /bin/bash -c "mycommand"

ときに"mycommand"終了すると、コンテナは(私はそれが停止していると仮定)停止しているが、私は、このコマンドでそれを見ることができるので、それは、削除されません。

$ docker ps -a

restart同じパラメータでこのコンテナにアクセスし、によって生成されたデータを保持する方法はありますmycommandか?


「ボリューム」または「ホストディレクトリのマウント」はあなたを満足させますか?言及されたドキュメントのように:docs.docker.com/engine/tutorials/dockervolumes
Haoming Zhang

回答:


123

はい、最初のコマンドの実行が終了すると、コンテナは停止します。

停止したコンテナは、次を使用して開始できます。

docker start container_name

コマンドの出力を確認したい場合は、-aiオプションを追加する必要があります。

docker start -ai container_name

PS。そこにあるdocker restart container_nameが、実行されているコンテナを再起動するために使用されている-私はあなたのケースではないと信じています。


1
毎回、起動直後にコンテナが停止します。そのポイントが何であるかわからない。-aiコマンドを使用すると、次の応答が返されます。要件ファイルを開けませんでした:[Errno 2]そのようなファイルまたはディレクトリはありません: 'requirements.txt'
geoidesic 2018年

@geoidesic詳細を教えてください。あなたが話している「requirements.txt」ファイルの種類は何ですか?
lmtx 2018年

1
@geoidesic、これをトラブルシューティングするために、エントリポイントを変更して、sleep 900コマンドを実行するだけで、コンテナに接続し、を使用してコンテナ内でコマンドを実行できるようになりましたdocker exec -it container_name bash。コンテナ内からコマンドを実行すると、スクリプトの最初の実装が失敗した理由がわかり、修正しました。
PATS

@PatSは、あなたがどのように組み合わせシェアを喜ばせることができstartsleep?走れるところまで行けないexec
ピット

9

最初に、$ docker ps -aすべてのコンテナー(実行中のコンテナーと停止中のコンテナー)が表示されるため、停止したコンテナーがリストに表示されません。

次に、停止したコンテナの実行を簡単に開始できます。

$ docker start container_name

コンテナが開始されたら、次の方法でコマンドを実行できます。

$ docker exec -it container_name bash -c "mycommand"

コンテナで作成したものは、それが存在する限り、コンテナ内に残ります。コンテナが削除されてもデータを保持したい場合は、ボリュームを使用できます。


1

そのはず

$ docker restart container_id # OR
$ docker restart container_name

受け入れられた回答restartは、すでに実行中のコンテナに対するものであると指摘しています
3pitt
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.