使用 systemd 运行 docker 容器

Ore*_*n_C 3 systemd docker

我有一个在 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
Run Code Online (Sandbox Code Playgroud)

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

我到处搜索并浏览了 Docker 的相关文档,但找不到答案。

另外,如果我从 docker start 命令中删除“-a”,那么即使容器已启动并运行,状态也将为“非活动”(死亡)。更新:过了一段时间,我没有确切的数字,服务因超时原因失败。这不是 3000 秒之后,而是更早的时间。虽然服务失败了,但是docker还在空中,可以使用
我已经验证过docker container ls

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

Ore*_*n_C 6

我明白了这个问题。有几件事是错误的:

  1. docker run 命令不应与标志 -d 和 -ti 一起使用。
  2. Type 应设置为 exec 而不是 forking。

完成这两项更改后,我获得了备受追捧的活动(正在运行)状态,并且 Docker 成功启动。