docker コンテナ起動時のシェル実行について2

引き続きdockerの話。

前回の投稿でコンテナ起動時にシェルを実行する方法について書いた。
dokcer コンテナ起動時のシェル実行について

前回の投稿に記載している内容で、コンテナ起動時にシェルを実行できるようになったが、
シェルの内容によっては、シェルの処理が終了したらコンテナがstopするので注意が必要。

例えば、下記内容のシェルをコンテナ起動時に実行するとする。

この場合、コンテナが起動してdocker_test.shのプロセスが立ち上がっても、すぐに終了する。
なぜなら、dockerではコンテナ起動時に指定したプロセスが終了すると、コンテナは停止してしまうから。

もし、コンテナ起動時にシェルを実行して、そのあともコンテナを起動し続けたい場合は、
下記のようにシェルを記述する。

最後に/bin/bashを起動する事により、echoコマンドが実行し終わっても
コンテナが停止しないようにしている。

これでシェル実行後にコンテナを停止しないようにできる。
ただ、この方法だと「docker stop」コマンドが実行された際にTERMシグナルを受け取る事が
できかったりするみたいなので、改善が必要。
参考URL:めもめも

改善の詳しい内容はまだ勉強中…。上記URL参考。

docker コンテナ起動時のシェル実行について

個人的な事でdockerを使用してコンテナ起動時に、コンテナ内のシェルを実行させようとした時にはまったのでメモ。

まず、下記のようなDockerfileを用意。

ADDでtest.shを/tmpフォルダに配置して、実行権限を付与。
CMDでコンテナ起動時にtest.shを実行。

これでコンテナ起動時にtest.shが実行されるはずだが、実行されなかった。
色々調べた結果、runコマンドでコンテナを実行する際に、コマンドを指定していたのが原因だった…

runコマンド実行時にコマンドを指定するとDockerfileの中で指定した、CMDは上書きされる為に/bin/bashのみが実行されていたのが原因。

/bin/bashを省いてコンテナを起動すると、ちゃんとシェルが実行された。

結構時間をとってしまった。dockerをもっと勉強しないと…

参考URL
http://www.ajisaba.net/