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 해 주면 재부팅을 한 뒤에 정상적으로 올라가게 된다.

Install gitlab on docker with systemd

1. Install docker

$ sudo apt-get install docker.io
$ sudo service docker start
# Add user into docker group to use docker command without sudo.
$ sudo adduser <username> docker

2. Pull gitlab community edition image

$ docker pull gitlab/gitlab-ce

3. Configure systemd service

[Unit]
Description=Gitlab in docker.
After=docker.service
Requires=docker.service

[Service]
Restart=always
ExecStartPre=-/usr/bin/docker rm gitlab-ce
ExecStart=/usr/bin/docker run --rm \
          --name gitlab-ce \
          --volume /srv/gitlab/config:/etc/gitlab \
          --volume /srv/gitlab/logs:/var/log/gitlab \
          --volume /srv/gitlab/data:/var/opt/gitlab \
          --publish 80:80 --publish 2222:22 \
          gitlab/gitlab-ce
ExecStop=/usr/bin/docker stop gitlab-ce

[Install]
WantedBy=local.target
$ sudo systemctl enable gitlab-docker