いつも通りdockerを立ち上げて、サーバーにアクセスするも繋がらず。
docker ps -a
でdockerの状態を調べると、 STATUSがexited
に...
restartしても変わらず、でもコンテナは削除したくない!
なので、調査方法に関して色々調べてみました。
手順
まず試すこと
$ docker logs コンテナ名
log出力先を変更してない限り、今までのエラーに関するログが出ているはず。
それでもわからない or コンテナ内部で作業する必要がある場合は以下を試す。
1.エラー状態にあるコンテナをイメージ化する
2.作ったimageををrunしてコンテナ内でbashを起動して内部調査
コンテナをイメージ化
コンテナをイメージ化するにはcommit
コマンドを使用します。
http://docs.docker.jp/engine/reference/commandline/commit.html
$ docker commit コンテナID 任意のイメージ名
作ったimageををrunしてコンテナ内でbashを起動
$ docker run --rm 任意のイメージ名 bash
--rm
オプションは、コンテナ実行後に削除してくるものです。
立ち上げたコンテナだらけになってしまうのを未然に防ぎます。
余談(attachとexecの違いについて)
今までdockerコンテナ内のbashを操作する際は
$ docker exec -it コンテナ名 bash
としていたが、
$ docker attach コンテナ名
という方法もあるようだ。何が違うの?
と思ったが、
https://qiita.com/RyoMa_0923/items/9b5d2c4a97205692a560
こちらが参考になった。
・attach
PID=1の標準入力とエラー出力、標準出力をattachする。
・exec
コンテナ内で新たなプロセス(上記の例だとbash)を立ち上げる。 -it
オプションで
それに標準入出力をつなぐ。
つまりexecではbashを起動してそれを操作しているのに対し、
attachはコンテナ直といった感じでしょうか。
なのでattachでexit
してしまうとコンテナ自体が停止してしまうので注意ということですね。
要この先学習/調査ポイント
- 擬似ttyがよくわからなかった
- attachではエラー出力も繋がれてるけどexecではどうだろう?
参考にさせていただいたページまとめ
https://docs.docker.com/ (公式)
https://qiita.com/RyoMa_0923/items/9b5d2c4a97205692a560
https://qiita.com/galigalikun/items/a2436e07cf78713cf4b6
https://blog.namiking.net/post/2015/09/docker-exec-exited/