Docker Compose容器执行启动脚本后自动重启问题求助
问题根源
Docker容器的生命周期完全绑定其主进程:当主进程退出时,容器会立即进入exited状态。你的启动命令是/bin/sh -c "/var/opt/install.sh",脚本执行完毕后,这个sh进程就会退出,而你设置的重启策略unless-stopped会触发Docker自动重启容器,形成循环。
解决方案
根据你的实际需求,选择以下任意一种方法:
1. 脚本执行后启动容器原本的核心服务(推荐)
如果install.sh是初始化脚本,最终需要运行代码工作室的主服务,修改脚本末尾,用exec启动核心进程(替换成容器原本的启动命令,比如code-server):
# 原有的安装步骤 apt-get update && apt-get install -y terraform powershell # 用exec启动核心服务,替换当前sh进程(关键) exec code-server --bind-addr 0.0.0.0:8443
exec会让核心服务进程替换当前的sh进程,成为容器的主进程,只有当核心服务退出时,容器才会停止,符合正常运行逻辑。
2. 脚本执行后保持容器运行(仅用于调试或纯初始化场景)
如果只是需要执行初始化操作,不需要运行长期服务,在脚本末尾添加阻塞命令,让主进程持续运行:
# 原有的安装步骤 echo "hello" apt-get update && apt-get install -y terraform powershell # 阻塞进程,防止容器退出 tail -f /dev/null
或者直接修改docker-compose.yml的启动命令:
command: /bin/sh -c "/var/opt/install.sh && tail -f /dev/null"
3. 调整重启策略(不推荐,仅临时测试)
如果不需要容器长期运行,只是执行一次初始化,将重启策略改为no:
restart: no
内容的提问来源于stack exchange,提问作者Simpleacc
相关产品推荐
相关产品推荐

