LoginSignup
19
15

More than 3 years have passed since last update.

docker exitedの原因究明

Last updated at Posted at 2020-04-20

いつも通り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/

19
15
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
19
15