Docker イメージは変更不可能でなければなりませんが、そのうちの 1 つを別のシステムにインポートすると異なる動作をします。
エラーを再現するために、debootstrapで構築されたdebian-wheezyイメージから始めましょう。
Dockerfileを使用して画像を構築します。
FROM debian-wheezy
RUN apt-get install -y fail2ban
RUN rm /var/run/fail2ban/fail2ban.sock
最後のコマンドは、次回の起動時にfailure2banがクラッシュするのを防ぎます。何らかの理由でDockerfileで手動でサービスを停止しても、ソケットファイルはfailure2banをインストールした後もそのまま残ります。ファイルがまだ存在する場合、Fail2ban を再起動できません。
画像を起動してFail2banを起動すると成功します。内容を確認できます。/var/run/fail2banリポジトリ:
$ docker build -t test/fail2ban .
$ docker run test/fail2ban ls /var/run/fail2ban
fail2ban.pid
ただし、画像をエクスポートして別のコンピュータにインポートする場合:
$ docker save test/fail2ban > /tmp/fail2ban.tar
$ scp /tmp/fail2ban.tar user@machine:/tmp
$ ssh user@machine "cat /tmp/fail2ban.tar | docker load"
$ ssh user@machine docker run test/fail2ban ls /var/run/fail2ban
fail2ban.pid
fail2ban.sock
今回はソケットファイルがあり、サービスを開始できません。
誰かがこの動作とトラブルシューティング方法を説明できますか?
詳細は次のとおりです。
$ uname -a
Linux debian 3.2.0-4-amd64 #1 SMP Debian 3.2.65-1+deb7u2 x86_64 GNU/Linux
$ docker --version
Docker version 1.6.0, build 4749651
$ ssh user@machine uname -a
Linux debian 3.2.0-4-amd64 #1 SMP Debian 3.2.65-1 x86_64 GNU/Linux
$ ssh user@machine docker --version
Docker version 1.6.0, build 4749651