Dockerのrestartingが止まらないときに確認すべきこと

docker-compose up -dでコンテナを起動した後、docker-compose psを確認するとrestartingとなっていることがあります。

そんなときに見直すべきところを書いてみます。

restart: alwaysをやめる

デバッグのために、まずはdocker-compose.ymlに書いているrestart: alwaysを削除します。

CMDでbashを実行

独自で作っているコンテナを終了させないためにはbashを実行するのが手っ取り早いです。

DockerfileのCMDのコマンドを以下に置き換えます。

CMD /bin/bash

そして、docker-compose.ymltty:trueを入れておきます。

これがないとexit 0になるので注意です。

tty: true

Dockerでrsyslogの設定

DockerでCentOS7を設定した時にrsyslogが動いてなくてはまりました。
そのときに行ったメモです。

インストール

そもそもrsysogが入ってませんでした。

yum install rsyslog

起動と終了

systemctlが使えないので手動で起動させます。

起動はこれだけでOK。

rsyslogd

終了するときはPIDを調べます。

ps -C rsyslogd

調べたpidを入れてkillします。

kill -TERM pid

rsyslogの設定

containerには余分なものが入っていないので、設定をシンプルにしなければなりません。
対象のファイルは以下の2つ。

/etc/rsyslog.conf
/etc/rsyslog.d/listen.conf

rsyslog.confを次のように変更します。

$ModLoad imuxsock
# $ModLoad imjournal 
$OmitLocalLogging off
# $IMJournalStateFile imjournal.state

listen.confをコメントアウトします。

# $SystemLogSocketName /run/systemd/journal/syslog

設定の反映

設定ができたら、上記のコマンドで再起動します。

動作確認にはloggerコマンドが便利です。

logger "test"
cat /var/log/messages

docker-compose upでno such imageが出るとき

docker-compose ps

Nameがすごいことになってるゴミコンテナが残ってました。

Name                                                                     Command           State     Ports
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
9baa9c7e8bcc_9baa9c7e8bcc_9baa9c7e8bcc_9baa9c7e8bcc_9baa9c7e8bcc_9baa9c7e8bcc_9baa9c7e8bcc_9baa9c7e8bcc_9baa9c7e8bcc_ubuntu   /bin/sh -c /bin/bash   Exit 137

削除したら無事に起動できました。

docker-compose rm