使用systemd运行docker容器

时间:2019-02-19 13:45:09

标签: docker systemd

我有一个服务定义,该服务定义使用CentOS 7上的systemd启动docker容器:

[Unit]
Description=MappingService
After=portal.service
Requires=docker.service

[Service]
TimeoutStartSec=3000
Type=forking
WorkingDirectory=/home/user/Downloads/MS_0.3.4_artifact
ExecStartPre=-/bin/docker rm -f eb-mapping-service-container
ExecStartPre=/home/user/Downloads/MS_0.3.4_artifact/deploy.sh /home/user/Downloads/MS_0.3.4_artifact/eb-mapping-service.tgz
ExecStartPre=/bin/docker run -v /dev/log:/dev/log -d -ti --log-driver=journald --network=bridge -p 9090:9090 --name eb-mapping-service-container eb-mapping-service  /bin/bash -c "cd /build/MappingService; ./start_multiple_clients_mapping_service.sh"
ExecStart=/bin/docker start -a eb-mapping-service-container
ExecStop=/bin/docker stop eb-mapping-service-container

[Install]
WantedBy=multi-user.target

此服务有效。它启动的Docker容器已启动。 每当我启动计算机时,它就会运行。我对此服务的问题是,它永远不会达到“活动(运行)”状态。而是停留在“激活(启动)”状态。 “ start_multiple_clients_mapping_service.sh”脚本启动node.js服务器并开始监听,因此不会直接退出。

我到处搜索并搜索了Docker的文档,找不到答案。

此外,如果我从docker start命令中删除了“ -a”,则即使容器已启动并正在运行,其状态也将为“不活动”(不活动)。 更新: 过了一会儿,我没有确切的号码,服务因超时原因而失败。这不是在3000秒之后,而是更早。 尽管服务失败,但docker仍在广播中并且可以使用
我已经通过docker container ls

进行了验证

问题:
如何更改服务定义以反映Docker的活动(运行)状态?

1 个答案:

答案 0 :(得分:2)

我理解了这个问题。有几处错误:

  1. docker run命令不应与-d和-ti标志一起使用。
  2. 应将“类型”设置为exec而不是分叉。

完成这两项更改后,随着Docker成功启动,我获得了备受追捧的Active(Running)状态。