Answers:
sudo systemctl enable docker
做到了。
现在有点老了,但是我已经开始使用cloud-init在所有新服务器上执行此操作。我有一个保存的cloud-init脚本,用于所有服务器。其中一部分包含:
#cloud-config
coreos:
units:
- name: "docker.service"
command: "start"
enable: true
这将启用docker服务,并在每次引导时都将其启动。
正如已经说明此评论由罗布,搬运工被插座激活。这意味着除非被调用,否则守护进程不会启动。这里已有的答案有效,但是CoreOS建议使用其他方法。
根据CoreOS文档,推荐的方法是为自己的应用创建服务,而该服务又需要Docker服务:
/etc/systemd/system/myapp.service:
[Unit]
Description=MyApp
After=docker.service
Requires=docker.service
[Service]
TimeoutStartSec=0
ExecStartPre=-/usr/bin/docker kill busybox1
ExecStartPre=-/usr/bin/docker rm busybox1
ExecStartPre=/usr/bin/docker pull busybox
ExecStart=/usr/bin/docker run --name busybox1 busybox /bin/sh -c "trap 'exit 0' INT TERM; while true; do echo Hello World; sleep 1; done"
[Install]
WantedBy=multi-user.target
并改为自动启动该服务:
$ sudo systemctl enable /etc/systemd/system/myapp.service
$ sudo systemctl start hello.service
该示例用例是在服务启动后将容器更新为最新版本,而高级示例也在etcd中注册了该服务。阅读CoreOS文档以获取更多背景信息。
我正在使用Docker Swarm,所以我没有负责systemd的特定应用程序...我只需要Docker在启动时启动即可。这是我制定的解决方案。
把这个/etc/systemd/system/poke-docker.service
:
[Unit]
After=default.target
[Service]
Type=oneshot
ExecStart=/usr/bin/docker version
RemainAfterExit=yes
[Install]
WantedBy=default.target
然后systemctl enable poke-docker
将其设置为在每次启动时在启动序列快要结束时触发。该docker version
命令与docker守护进程对话,触发套接字并启动docker服务本身。
我systemctl enable docker
在另一个答案中尝试了这个技巧,虽然它一开始就起作用,但似乎引起了某种形式的雷电风云,其中码头工人显然在试图做很多事情而失败了。我怀疑这是其中的注释中提到的“阻塞启动链”行为。