如何使用cloud-config文件启动CoreOS的Docker容器?

4

我正在尝试使用CoreOS的云配置文件,通过Terraform配置我的CoreOS服务器。目前我正在尝试在一个Docker容器中设置Mongo数据库。

这是我的配置文件:

write_files:
  - path: "/home/core/keyfile"
  permissions: "0600"
  owner: "999"
  content: |
    hUoQVrERB0*** <here is my key for MongoDB>

coreos:
  units:
    - name: "dockerstart.service"
      command: "start"
      content: |
        [Unit]
        Description=Start
        Author=Me

        [Service]
        Restart=always
        ExecStart=/usr/bin/docker run --name mongo -v /home/core:/opt --add-host node1.example.com:127.0.0.1 -p 27017:27017 -d mongo:2.6.5 --smallfiles --keyFile /opt/keyfile --replSet "rs0"
        ExecStop=/usr/bin/docker rm -f mongo

我不确定如何使用CoreOS的units(当我通过ssh登录到服务器时,Docker容器没有运行,因此配置文件不正确)。根据CoreOS验证器,我的文件是有效的。另外,我不确定这是否是部署MongoDB服务器的最简单方法。 如何正确使用CoreOS的units?有没有关于改进Mongo数据库部署的想法? 欢迎任何帮助、评论和建议!
2个回答

4

我终于找到了解决办法。

实际上,使用docker run命令并加上-d选项会将该命令变为守护进程。因此,当systemd发现此操作在后台运行时,会认为Docker正在崩溃。

以下是服务器上的journalctl -u dockerstart.service结果:

docker[1237]: ace3978442a729420ecb87af224bd146ec6ac7912c5cc452570735f4a3be3a79
docker[1297]: mongo
systemd[1]: dockerstart.service: Service hold-off time over, scheduling restart.
systemd[1]: Stopped Start.
systemd[1]: Started Start.

在这里,您可以清楚地看到systemd停止和重新启动Start服务。

因此,解决方案可能是从docker run命令中移除-d选项。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接