我已经使用以下服务定义文件来设置systemd服务。
[Unit]
Description=MappingService
After=docker.service
Requires=docker.service
[Service]
TimeoutStartSec=3000
WorkingDirectory=/home/oren/MappingService
ExecStartPre=-/usr/bin/sudo /home/oren/MappingService/deploy.sh /home/oren/MappingService/eb-mapping-service.tgz
ExecStart=/usr/bin/sudo /home/oren/MappingService/ebms_run.sh
Type=simple
[Install]
WantedBy=multi-user.target
该服务的目的是启动特定的Docker容器。该操作似乎成功,因为docker出现在:
docker container ls
它正在侦听9090端口,我成功验证了该端口是否已被nmap打开。
但是当我在systemctl上检查服务状态时,(systemctl status mappingservice.service
)
我变得不活动(死),如下所示。
●mappingservice.service-MappingService已加载:已加载 (/etc/systemd/system/mappingservice.service;已启用;供应商预设: 启用:有效:无效(失效),自IST 2019年2月14日14:54:20起; 20分钟前进程:1784 ExecStart = / usr / bin / sudo /home/oren/MappingService/ebms_run.sh(代码=已退出,状态= 0 /成功) 进程:1323 ExecStartPre = / usr / bin / sudo /home/oren/MappingService/deploy.sh /home/oren/MappingService/eb-mapping-service.tgz(代码=已退出, 状态= 0 /成功)
我在这里搜索了线索,我只找到了对实际docker服务的systemd使用的引用,而不是像我在这里尝试的那样使用的特定容器。
ebms_run.sh的内容:
#!/bin/bash -x
source defs.sh
DOCKER_PARAMS="-v /dev/log:/dev/log -d --log-driver=journald --add-host=<server1-alias1>:172.17.0.1 --add-host=<server1-alias2>:172.17.0.1 --network=bridge -p 9090:9090 --name ${DOCKER_CONTAINER_NAME}"
docker rm -f ${DOCKER_CONTAINER_NAME}
docker run ${DOCKER_PARAMS} ${DOCKER_IMAGE_NAME} /bin/bash -c "cd /build/MappingService; ./start_multiple_clients_mapping_service.sh
脚本start_multiple_clients_mapping_service.sh
在docker容器中运行,并且实际上是连续的。直到码头工人死亡,它才会死亡。
问题:
如何配置我的systemd服务来管理Docker容器?