Docker 이미지는 변경 불가능해야 하지만 그 중 하나를 다른 시스템으로 가져오면 다르게 동작합니다.
오류를 재현하기 위해 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