Docker容器在Shell退出后终止运行问题求助
解决Docker容器依赖Shell会话、开机不自启问题
问题根源
你用docker-compose up -d启动的容器依赖当前Shell会话生命周期,且未配置系统级开机自启服务,导致退出Shell容器停止、重启服务器后需登录才启动。
步骤1:停止现有容器
先清理当前运行的容器(数据已挂载到卷,不会丢失):
docker-compose down
步骤2:创建systemd服务文件
在/etc/systemd/system/目录下创建postgres-pgadmin.service文件,内容如下:
[Unit] Description=PostgreSQL & pgAdmin Docker Service Requires=docker.service After=docker.service [Service] Type=oneshot RemainAfterExit=yes WorkingDirectory=/你的docker-compose.yml所在目录 ExecStart=/usr/bin/docker-compose up -d ExecStop=/usr/bin/docker-compose down TimeoutStartSec=0 [Install] WantedBy=multi-user.target
- 替换
/你的docker-compose.yml所在目录为实际存放配置文件的路径 - 若
docker-compose路径不同,执行which docker-compose获取路径后替换/usr/bin/docker-compose
步骤3:配置开机自启并启动服务
systemctl daemon-reload systemctl enable postgres-pgadmin.service systemctl start postgres-pgadmin.service
验证操作
- 执行
systemctl status postgres-pgadmin.service检查服务运行状态 - 执行
docker ps确认容器是否正常启动 - 退出Shell会话或重启服务器,再次验证容器持续运行状态
可选权限排查
如果容器启动失败,检查挂载卷的权限是否符合容器需求:
# 修复PostgreSQL数据卷权限(postgres用户UID为999) chown -R 999:999 /data/docker/postgresql/data # 修复pgAdmin数据卷权限(pgadmin用户UID为5050) chown -R 5050:5050 /data/docker/postgresql/pgadmin-data
内容的提问来源于stack exchange,提问作者strtCoding
相关产品推荐
相关产品推荐

