問題
Dockerfile でいうところの CMDで何が走るかを、既存のイメージで確認したい。
Dockerfile
CMD ["/bin/sh"]
解決
docker inspect
で可能。
$ docker inspect [イメージ名] --format='{{.Config.Cmd}}'
例:
$ docker inspect alpine --format='{{.Config.Cmd}}'
[/bin/sh]
このコマンドが面倒だったら grep しても良い。
$ docker inspect alpine | grep CMD
"CMD [\"/bin/sh\"]"
色んなイメージの CMD を見てみる
alpine
bashさえ入っていない。shが起動する。
$ docker inspect alpine --format='{{.Config.Cmd}}'
[sh]
ubuntu
bashが起動する。
$ docker inspect ubuntu --format='{{.Config.Cmd}}'
[/bin/bash]
rails
pry が起動する。
$ docker inspect rails --format='{{.Config.Cmd}}'
[irb]
python
python が起動する。
$ docker inspect python --format='{{.Config.Cmd}}'
[python3]
インタラクティブモード
それぞれインタラクティブモードで実行すると、CMDで指定されたものが起動するのが分かる。
sh
$ docker run -it alpine
/ #
bash
$ docker run -it ubuntu
root@41490d5a88ce:/#
pry
$ docker run -it rails
irb(main):001:0>
python
$ docker run -it python
Python 3.6.1 (default, May 11 2017, 22:14:44)
[GCC 4.9.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
CMD の書き換え
よく例で出て来る $ docker run -it [イメージ名] /bin/bash
という書き方は、CMDを書き換えて実行することが出来る。
alpine
そもそも /bin/bash
さえ入ってないので怒られる。
$ docker run -it alpine /bin/bash
docker: Error response from daemon: oci runtime error: container_linux.go:247: starting container process caused "exec: \"/bin/bash\": stat /bin/bash: no such file or directory".
ubuntu
もともと /bin/bash
なので動作変わらず。
$ docker run -it ubuntu /bin/bash
root@3ff997da5e74:/#
rails
pry ではなくbashで接続するようになった。
$ docker run -it rails /bin/bash
root@e0494a68300d:/#
python
python ではなくbashで接続するようになった。
$ docker run -it python /bin/bash
root@6892c2322999:/#
参考
チャットメンバー募集
何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。