配置systemctl启动Docker容器时提示容器不存在的问题求助
问题:Docker容器vault_orthanc通过systemctl配置开机自启失败
报错信息
Mar 08 14:28:22 humerus systemd[1]: Started Orthanc container. Mar 08 14:28:22 humerus docker[9389]: Error response from daemon: No such container: vault_orthanc Mar 08 14:28:22 humerus docker[9389]: Error: failed to start containers: vault_orthanc Mar 08 14:28:22 humerus systemd[1]: vault_orthanc.service: Main process exited, code=exited, status=1/FAILURE Mar 08 14:28:22 humerus systemd[1]: vault_orthanc.service: Failed with result 'exit-code'.
操作步骤
- 创建Docker容器:
docker run --name=vault_orthanc --shm-size=2g -p 4242:4242 -p 8042:8042 vault-orthanc
执行docker ps显示容器正常运行:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8828f32c8411 vault-orthanc "Orthanc /etc/orthan…" 23 minutes ago Up 23 minutes 0.0.0.0:4242->4242/tcp, :::4242->4242/tcp, 0.0.0.0:8042->8042/tcp, :::8042->8042/tcp vault_orthanc
- 创建systemd服务文件:
nano /etc/systemd/system/vault_orthanc.service
文件内容:
[Unit] Description=Orthanc container Requires=docker.service After=docker.service [Service] Restart=always ExecStart=/usr/bin/docker start -a vault_orthanc ExecStop=/usr/bin/docker stop -t 2 vault_orthanc [Install] WantedBy=default.target
- 启用并启动服务:
sudo systemctl enable vault_orthanc.service sudo systemctl start vault_orthanc.service
解决方案
1. 确认容器是否存在
先检查容器是否真的存在(docker ps仅显示运行中容器,docker ps -a显示所有状态容器):
docker ps -a | grep vault_orthanc
- 若无输出:说明容器已被删除,重新创建容器时建议添加
--restart=always参数,让Docker自身管理开机自启:
若坚持用systemd,重新创建容器后再启动服务即可。docker run --name=vault_orthanc --shm-size=2g -p 4242:4242 -p 8042:8042 --restart=always vault-orthanc - 若有输出:说明容器存在,继续下一步排查。
2. 检查容器名称拼写与大小写
确保vault_orthanc.service文件中ExecStart和ExecStop里的容器名称与实际名称完全一致(Docker容器名称区分大小写)。
3. 验证Docker命令路径
检查系统中Docker命令的实际路径:
which docker
若输出不是/usr/bin/docker,修改服务文件中的命令路径为实际路径,例如:
ExecStart=/usr/local/bin/docker start -a vault_orthanc ExecStop=/usr/local/bin/docker stop -t 2 vault_orthanc
修改后重新加载配置并重启服务:
sudo systemctl daemon-reload sudo systemctl restart vault_orthanc.service
4. 优化systemd服务依赖
修改服务文件的[Unit]部分,增加对docker.socket的依赖,确保Docker完全就绪后再启动容器:
[Unit] Description=Orthanc container Requires=docker.service docker.socket After=docker.service docker.socket
重新加载配置并重启服务:
sudo systemctl daemon-reload sudo systemctl restart vault_orthanc.service
5. 排查权限问题
若创建容器时用的是非root用户,可在[Service]部分添加用户指定:
[Service] Restart=always User=your_username ExecStart=/usr/bin/docker start -a vault_orthanc ExecStop=/usr/bin/docker stop -t 2 vault_orthanc
替换your_username为实际用户名,之后重新加载配置并重启服务。
内容的提问来源于stack exchange,提问作者Philipp Johannsen
相关产品推荐
相关产品推荐

