本記事はDocker ver24.0.7の環境で確認しています。
このコマンドは、停止状態、もしくはdocker createコマンドで作成したコンテナを起動することが出来ます。
また、オプションを指定することによって、コンテナの標準入力や標準出力、標準エラー出力に接続することも可能です。
それでは以下で詳細に解説いたします。
docker startコマンドのフォーマットとオプション
フォーマット
docker start [オプション] [コンテナ] [コンテナ...]
主なオプション一覧
オプション | 概説 |
---|---|
-a | コンテナの標準出力及び標準エラー出力と Dockerホストの標準出力及び標準エラー出 力を接続する |
-i | コンテナの標準入力とDockerホストの標準 入力を接続する |
コマンド例
$ docker start testvm
docker startコマンドの主な使い方
以下で実例をまじえたコマンドの使い方を解説していきたいと思います。
基本事項の解説
停止状態(docker stopコマンドで停止した状態)やdocker createコマンドで生成したコンテナを起動することができます。
すでにコンテナとして存在するもののみ起動することが可能です。
似たようなコマンドに、docker runがあります。このコマンドは、コンテナの生成から起動まで行う際に使用します。
間違えやすいのでご注意ください。
作成したコンテナや停止状態のコンテナを起動する
以下のコマンドで、コンテナtestvmを作成します。
$ docker create -it --name testvm ubuntu bash
このdocker createコマンドを実行しますと、bashをデーモンとして動かす空のコンテナが作成されます。
作成したコンテナtestvmを起動します。
$ docker start testvm
docker psコマンドでtestvmコンテナが起動していることを確認します。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7ad7ecdf5e45 ubuntu "bash" 19 seconds ago Up 3 seconds testvm
「STATUS」が「UP」と表示されてますので、起動状態であることが確認できます。
ちなみに、停止状態のコンテナはdocker psコマンドに「-a」オプションを付けて実行することで確認できます。
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS
PORTS NAMES
7ad7ecdf5e45 ubuntu "bash" 21 seconds ago Exited (0) 5 seconds ago
testvm
「STATUS」がExitedになっていますので、testvmは停止しています。
この状態のコンテナは、docker startコマンドで起動することができます。
標準出力と標準エラー出力に接続してコンテナを起動する
以下のコマンドで、「ping localhost」を実行するCentOSがベースイメージのコンテナtestvm2を作成します。
$ docker create --name testvm2 centos ping localhost
※ubuntuのDockerイメージにはpingが入っていませんでしたので、本節ではCentOSのDockerイメージを使用しております
作成したコンテナを、以下のdocker startコマンドで起動します。
$ docker start testvm2
念のため起動確認をしておきます。
$ docker ps | grep testvm2
472c2ea7a687 centos "ping localhost" 2 minutes ago
Up About a minute testvm2
名前がtestvmのコンテナが起動(Up状態)されていることが確認できました。
コンテナ内ではpingコマンドが実行されており、コンテナ内の標準出力に、その結果が出力されている状態です。
よって、Dockerホスト上には何も出力されません。
ここで、docker stopコマンドで、このコンテナを停止させます。
$ docker stop testvm2
次に、以下のコマンドで停止したコンテナを起動してみてください。
-aオプションを付けてコンテナを起動しますと、コンテナ内の標準出力をDockerホストに出力することができます。
$ docker start -a testvm2
以下のように、pingコマンドの出力内容が表示されたと思います。
PING localhost (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.037 ms
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.028 ms
64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.030 ms
64 bytes from localhost (127.0.0.1): icmp_seq=4 ttl=64 time=0.057 ms
64 bytes from localhost (127.0.0.1): icmp_seq=5 ttl=64 time=0.061 ms
「Ctrl+c」を打つと出力は止まります。
これによってpingコマンドが停止しますので、それと同時にコンテナtestvm2も停止します。
再度、先ほどのdocker startコマンドを「-a」オプション付きで実行しますと、コンテナtestvm2が起動し、pingが実行されます。
「-a」オプションを付けることによって、コンテナとDockerホストの標準出力及び標準エラー出力が接続されます。
それによって、コンテナ内の標準出力に出力されているpingコマンドの結果が、Dockerホストの標準出力に出力され、結果としてpingコマンドの出力がDockerホスト上に表示されるようになるわけです。
標準入力に接続してコンテナを起動する
以下のコマンドで、シェルプログラムの「bash」を実行するCentOSがベースイメージのコンテナtestvm3を作成します。
$ docker create -it --name testvm3 centos bash
次に、docker startコマンドの「-a -i」の2つのオプションを付けてコンテナtestvm3を起動します。
$ docker start -i -a testvm3
すると、以下のようなプロンプトに変わりました。
[root@8dd46bef316c /]#
これは、「-a」と「-i」のオプションを付けて起動することによって、コンテナ内のbashプロセスの標準入出力とDockerホストの標準入出力が接続されて、結果として、コンテナ内で動いているbashプロセスのプロンプトがDockerホスト上に表示されたことになります。
「exit」コマンドでシェルを終了させますと、コンテナも停止してしまいますが、再度「-a」と「-i」のオプションを付けてdocker startで起動すると、またプロンプトが表示されます。
おわりに
以上でdocker startコマンドの紹介を終わります。
ご指摘、ご要望などが御座いましたらコメントいただけるとうれしいです。
他のDockerコマンドの実例付紹介記事は、本サイト内の別記事「Dockerコマンドの一覧(オリジナルな実例付き)」をご参照ください。
ご訪問ありがとうございました!
コメント