5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

docker run コマンドの-iオプションについて調べてみた

Posted at

docker初学者です。間違えなどありましたら、ご指摘いただければ幸いです。

docker runのiオプションについて少し調べてみたました。

オプションiについて

docker公式では、以下のように書かれている。

-i, --interactive アタッチしていなくても STDIN を開き続ける

STDINは標準入力のことらしい。キーボードからの入力を可能にするとのこと。いつもお世話になっているわかりそうでわからないサイトには以下のように記載されていました。

キーボードからの入力だよ
「特に指定をしていないときは、ここから入力されたデータが来るはず!」なデータの通り道だよ
https://wa3.i-3-i.info/word11636.html

つまり、アタッチしなくても標準入力を開き続けるということだと思うが、よくわからないので実際にコマンドを打ってみました。!!

ubuntuイメージを使用して挙動を調べる

オプションありとなしのパターンで挙動を調べてみた!コンテナを起動してコンテナに入り、入力したコマンドが実行されるかを確認する。

##①まずdocker runで-iありで起動して挙動を確認

MacBook-Pro:~ $  docker run -it -d --name test ubuntu /bin/bash
d43a339cc5ca000850c680ddfe75721321d58f8ff45145bb504f4be95c3854f234
MacBook-Pro:~ $ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
d43a339cc5ca        ubuntu              "/bin/bash"         4 seconds ago       Up 3 seconds                            test

STATUSの項目がUp 3 secondsになっていることから、上手くubuntuイメージの起動している。次にアタッチしてコンテナ内に入ってみる。

※コマンドについて
docker attach <image-name> : このコマンドを実行することでコンテナ内に入ることができる。コンテナ内ですでに実行しているシェルを使ってコンテナとのやりとりをする。また、コンテナから抜ける時は、exitまたはCtl+p からのCtl+qを実行する。
exitの場合は、コンテナから抜けるとともに、コンテナが停止してしまう。
Ctl+p からのCtl+qの場合は、コンテナから抜けるだけで、コンテナを停止することはない。
今回はexitを使用してコンテナから抜けることにする。

MacBook-Pro:~ $ docker attach test
root@d43a339cc5ca:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@d43a339cc5ca:/# exit
MacBook-Pro:~ $  docker ps -a
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS                     PORTS               NAMES
d43a339cc5ca        ubuntu                "/bin/bash"              26 seconds ago      Exited (0) 7 seconds ago                       test

lsコマンドが実行されコンテナ内の情報が出力された。
exitを実行したため、コンテナ自体も停止しているのがわかる。

##②次に-iなしで起動してみる。
先ほどのコンテナは削除して、-iオプションなしで起動してみる。

MacBook-Pro:~ $ docker run -t -d --name test ubuntu /bin/bash
40b1356e365135c8c1df8514e64239156de4216927dec2bfdd0571972d11147d
MacBook-Pro:~ $ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
40b1356e3651        ubuntu              "/bin/bash"         9 seconds ago       Up 8 seconds                            test

問題なく起動している。次にattachして、コンテナ内で「ls」コマンドを入力して出力が返ってくるかを確認。

MacBook-Pro:~ $ docker attach test
root@40b1356e3651:/# ls

何も反応が返ってこない。
標準入力(キーバードからの入力情報など)ができない状態のため、出力はされていない。
コンテナから出る。

root@40b1356e3651:/# exit
MacBook-Pro:~ $ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
40b1356e3651        ubuntu              "/bin/bash"         3 minutes ago       Up 3 minutes                            test

exitで抜けたのに、コンテナが停止していない。。
STATUSの項目がUp 3 minutesとなっている。。
attachコマンドでコンテナ内に入った場合、exitコマンドを入力するとコンテナから抜けるかつコンテナが停止してしまうのだが、今回のケースではコンテナが起動したままであった。。

これは、-iオプションを付けない場合、標準入力ができないため、ubuntuイメージから起動したコンテナに対しては、exitコマンドを実行した情報すら伝わらないため、コンテナが終了せず起動しっぱなしのままであるのだと思う。

結論

以上-iオプションを付けずにコンテナを起動してしまうと、コマンドなどの入力情報がコンテナまで伝わらないということがわかった。(公式ドキュメント通りの挙動を確認できた!)

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?