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

时间:2016-10-05 15:02:17

标签: linux mongodb docker coreos

我尝试使用cloud-config file for 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(当我进入服务器时,docker容器没有运行,因此配置文件不正确)。根据{{​​3}},我的文件是有效的。此外,我不确定这是否是部署MongoDB服务器的最简单方法。 如何正确使用CoreOS units?有关改进如何部署Mongo数据库的方法的想法吗?

感谢任何帮助,评论和建议!

2 个答案:

答案 0 :(得分: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。

答案 1 :(得分:0)

如果将来帮助您,您可以使用Container Linux Config文件格式来设置CoreOS的初始配置: 我发布了一个示例,它根据应用于Terraform的Container Linux Config文件创建了一个点火配置:https://github.com/joariasl/terraform-ansible-docker-swarm-coreos-aws/tree/feature/coreos-etcd

关于此:https://coreos.com/os/docs/latest/provisioning.html