Ubuntu20.04 Docker容器内systemd自定义服务自启不生效问题
问题原因和解决方案
核心问题:Docker容器默认未以systemd作为1号进程运行
systemd必须作为容器的PID 1进程才能正常工作,默认启动Ubuntu镜像时默认入口为bash或其他命令,并未启动systemd,所以你已配置为开机自启的服务不会自动触发执行,服务配置本身没有错误。
具体修复步骤
1. 调整容器启动参数,开启systemd支持
启动容器时需要添加对应权限配置、挂载cgroup文件系统、指定systemd为入口进程,完整启动命令示例:
docker run -d \ --name mydocker \ --privileged \ -v /sys/fs/cgroup:/sys/fs/cgroup:ro \ 你使用的Ubuntu20.04镜像名
如果是已经创建好的容器,建议直接按上述参数重新创建容器,稳定性更高。
2. 确认systemd运行状态
容器启动后进入容器,执行ps 1,如果输出的COMMAND字段为/sbin/init,说明systemd已经正常作为1号进程运行。
3. 优化服务配置(可选)
你现有的my.service配置基本可用,因为服务是Type=oneshot类型,建议在[Service]段添加RemainAfterExit=yes参数,避免systemd误判服务状态为dead:
[Unit] Description=my test Documentation=man:test auto(8) man:test_config(5) [Service] ExecStart=/root/test.sh Type=oneshot RemainAfterExit=yes [Install] WantedBy=multi-user.target
修改后执行systemctl daemon-reload && systemctl enable my.service生效。
4. 验证效果
重启容器后进入容器,执行systemctl status my.service即可看到服务已正常运行,/usr/local/test.log也会有对应输出。
内容的提问来源于stack exchange,提问作者Jerry Wu
相关产品推荐
相关产品推荐

