1. ホーム
  2. docker

[解決済み] 既に存在するDockerコンテナ上でコマンドを実行するにはどうすればよいですか?

2022-03-17 09:20:52

質問

でコンテナを作成しました。 -d ということで、インタラクティブではありません。

docker run -d shykes/pybuilder bin/bash

コンテナが終了しましたね。

CONTAINER ID        IMAGE                     COMMAND             CREATED             STATUS                      PORTS               NAMES
d6c45e8cc5f0        shykes/pybuilder:latest   "bin/bash"          41 minutes ago      Exited (0) 2 seconds ago                        clever_bardeen

さて、このマシンで時々コマンドを実行し、終了したいと思います。反応を見るためにね。

マシンを起動しようとしました。アタッチしてみました。を呼び出せると思ったのですが run をコンテナで使用することができますが、それは許可されていないようです。使用方法 start は、実行された後、すぐに存在するように見えるだけです。

終了後、インタラクティブモードに戻りたいのですが。

試してみました。

docker attach d6c45e8cc5f0

しかし、私は得る。

2014/10/01 22:33:34 You cannot attach to a stopped container, start it first

でも、起動してもどうせ終了してしまう。キャッチ22です。勝てない。

解決方法は?

2014年10月に Docker チームは docker exec コマンド : https://docs.docker.com/engine/reference/commandline/exec/

これで、実行中のコンテナのID(または名前)を知るだけで、任意のコマンドを実行できるようになったわけだ。

docker exec -it <container_id_or_name> echo "Hello from container!"

なお exec コマンドは、すでに実行中のコンテナに対してのみ機能します。現在コンテナが停止している場合は、まず以下のコマンドでコンテナを実行する必要があります。

docker run -it -d shykes/pybuilder /bin/bash

ここで最も重要なのは -d オプションで、これは detached . これは、最初にコンテナに指定したコマンド( /bin/bash )はバックグラウンドで実行され、コンテナは すぐに停止する .