【发布时间】:2022-01-04 12:12:23
【问题描述】:
我的环境在 docker image(ubuntu 20.04) 下,我想在每次启动 mydocker 后使用 systemd 启动我的服务,我在这里有自己的 .service 文件:
/etc/systemd/system/my.service:
[Unit]
Description=my test
Documentation=man:test auto(8) man:test_config(5)
[Service]
ExecStart=/root/test.sh
Type=oneshot
[Install]
WantedBy=multi-user.target
/root/test.sh 已经 chmod 777:
#!/bin/bash
echo "hello~" > /usr/local/test.log
exit 0
我做了以下操作:
systemctl enable my.service
docker stop mydocker
docker start mydocker
docker exec -it mydocker bash
但是在我启动 mydocker 之后,我没有看到 /root/test.sh 被执行,我像这样检查服务状态:
my.service - my test auto
Loaded: loaded (/etc/systemd/system/my.service, enabled)
Active: inactive (dead)
手动触发服务没问题:
root@:/# systemctl start my.service
root@:/# cat /usr/local/test.log
hello~
我遗漏了什么吗?还是 systemd 在 docker 中不能正常工作?
谢谢。
【问题讨论】:
-
Systemd 在 Docker 中无法正常工作。我会将您的图像设置为具有
CMD /root/test.sh以将脚本作为主容器进程运行,并在此处完全避免使用 systemd。 -
也可以查看this post
-
我看到这可能是合理的@DiogoSimões
docker run -it --rm \ -e container=docker \ --tmpfs /run \ --tmpfs /tmp \ -v /sys/fs/cgroup:/sys/fs/cgroup:ro \ --cap-add SYS_ADMIN \ centos /sbin/init但我使用 ubuntu 没有找到 /sbin/init,似乎 docker 的目标是作为微服务器应用 systemd 功能作为 dockerfile CMD 和 docker running 命令...
标签: docker service systemd ubuntu-20.04 systemctl