Docker 守护进程在 CoreOS 上启动时不启动

Docker 守护进程在 CoreOS 上启动时不启动

我安装了 CoreOS (835.9.0),它在启动时不会启动 docker 守护进程。只有当我通过 SSH 登录并执行例如 时,它才会启动docker ps

如何让 docker 守护进程在系统启动时自动启动?

当我说docker守护进程时,我的意思是ps -ef | grep docker在我执行完之后才显示任何进程docker ps

答案1

sudo systemctl enable docker成功了。

答案2

这有点过时了,但我已经开始在所有新服务器上使用 cloud-init 来执行此操作。我已保存了一个用于所有服务器的 cloud-init 脚本。其中一部分包含:

#cloud-config
coreos:
  units:
    - name: "docker.service"
      command: "start"
      enable: true

这将启用 docker 服务并在第一次和每次启动时启动它。

答案3

正如已经解释的那样此评论经过,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 文档了解更多背景信息。

答案4

我使用的是 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另一个答案中的技巧,虽然一开始有效,但似乎造成了某种惊群效应,docker 显然试图做很多事情,但失败了。我怀疑这是评论中提到的“阻止启动链”行为。

相关内容