Skip to Content

a lucky systemd crash teach me how to overwrite systemd service in a elegant way

Suddenly, systemd broken, even systemctl-status reports error. So I restart Ubuntu, and the situation become even worse: I can’t see the desktop. Luckily, after another restart, everything becomes fine.

There seems to be something wrong with Docker’s systemd. This accident gives me a chance to find a elegant way to overwrite default .service

对于例如 foo.service 这样的单元文件, 可以同时存在对应的 foo.service.d/ 目录, 当解析完主单元文件之后,目录中所有以 “.conf” 结尾的文件, 都会被按照文件名的字典顺序,依次解析(相当于依次附加到主单元文件的末尾)。 这样就可以方便的修改单元的设置,或者为单元添加额外的设置,而无需修改单元文件本身。

/lib/systemd/system/docker.service.d/registry-mirror.conf

[Service]
ExecStart=  # reset the option in /lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --registry-mirror=https://registry.docker-cn.com

非常感谢金步国。从这次经历中我体会到有些中文教程也是很好的,一味强调英文可能在无形中成了装逼。

2019-03-01 后记:后来清华的校园网比较给力,官方的 registry 网速也还可以,也就用不着修改 docker.service 了。