Fix Docker DNS problem

My school blocks DNS request packets to any host except school’s DNS server.
But many Docker image uses 8.8.8.8 and 8.8.4.4 as DNS server.

append --dns a.b.c.d to docker run command fix this problem temporarilly. But this option cannot be used on build command. So I have to use another solution.

Append --dns a.b.c.d to docker daemon command.

# /etc/default/docker
DOCKER_OPTS="--dns a.b.c.d"

Update – 2017-08-20

Just use /etc/docker/daemon.json to do this:

{
  "dns": ["a.b.c.d"]
}

Cannot start docker daemon on systemd

우분투 버전을 올린 후에 Docker 서비스를 시작할 수 없는 문제가 있는데 해결 방법이 좀 기괴해서 나중에 삽질을 또 하지 않기 위해 블로그에 글로 남긴다.

sudo service docker startsudo systemctl start docker든 시작을 할 수 없다는 메시지가 나오고 로그를 살펴보면 -H fd:// 라는 옵션이 붙어 실행이 되는데 이 옵션이 붙으면 실행이 안 된다.
문제는 /etc/default/docker 파일을 봐도 DOCKER_OPTS는 그렇게 설정이 안 되어 있다는 거다.

결론부터 말하자면 /lib/systemd/system/docker.service 얘를 수정하면 된다. 쓸데없이 붙어있는 옵션을 지워 준 후 다음 명령을 실행하자

$ sudo systemctl daemon-reload
$ sudo systemctl start docker

dokku-alt on systemd

동아리 내부에서 쓰려고 어디서 주워 온 컴퓨터에 우분투를 깔고 dokku-alt를 세팅 했으나 재부팅을 했을 때 컨테이너들이 안 뜨는 문제가 있었다.
원래 /etc/init/dokku-redeploy.conf에 모든 앱을 다시 디플로이 하는 스크립트가 들어 있는데 아무리 수정을 해도 실행이 안 되는 것 같아서 살펴보니 /etc/init 아래에 있는 애들은 upstart 전용 스크립트들이고 systemd에선 안 돌아간다. 그래서 oneshot 스크립트를 하나 만들어서 등록을 해 줬다.

# /etc/systemd/system/dokku-redeploy.service
[Unit]
Description=Dokku redeploy all
After=docker.service

[Service]
Type=oneshot
ExecStart=/bin/sh -c "sleep 10; /usr/local/bin/dokku deploy:all"

[Install]
WantedBy=multi-user.target

대충 이렇게 만들고 나서 $ sudo systemctl enable dokku-redeploy.service 해 주면 재부팅을 한 뒤에 정상적으로 올라가게 된다.