docker-compose中restart_policy的delay参数未生效问题求助
问题原因
你使用的deploy.restart_policy是Docker Swarm集群模式专属的配置项,当用普通单机的docker-compose up启动服务时,Docker会直接忽略deploy节点下的所有配置。这就是为什么你的delay:6000s完全不起作用,容器退出后立刻重启,和restart: always行为一致。
解决办法
根据你移除systemd、实现带延迟容器重启的需求,有两种可行方案:
方案1:切换到Docker Swarm模式运行
如果你的环境允许使用Swarm,单节点也可以部署,按以下步骤操作:
- 初始化Swarm:
docker swarm init
- 用Swarm命令替代普通compose命令启动服务:
docker stack deploy -c docker-compose.yml my-service
此时deploy.restart_policy里的delay参数会生效,容器退出后会等待6000秒再重启。
方案2:单机环境下用脚本实现延迟重启
如果不想用Swarm,可以写一个简单的shell脚本循环启动容器,在容器退出后添加延迟:
#!/bin/bash while true; do docker run --rm imagexy echo "容器退出,等待10分钟后重启..." sleep 600 done
给脚本添加执行权限后运行:
chmod +x restart-script.sh ./restart-script.sh
如果需要后台运行,可搭配nohup:
nohup ./restart-script.sh &
补充说明
单机版docker-compose本身不支持自定义重启延迟,restart参数只有no、always、on-failure、unless-stopped这几个选项,没有延迟配置。
内容的提问来源于stack exchange,提问作者jan-seins
相关产品推荐
相关产品推荐

