You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 16:27:07