Docker Swarm问题:Entrypoint执行成功后服务仍重复启动
Docker Swarm中一次性任务服务自动重启的解决办法
在Docker Swarm模式下,restart是容器级配置,Swarm集群不会用它来管理服务的重启行为,真正控制服务重启逻辑的是deploy.restart_policy配置项——这就是你加了restart: "no"但服务仍自动重启的核心原因。
要让client服务执行完编译任务后不再重启,需要修改docker-compose.yml中client服务的deploy配置,添加restart_policy并设置condition: none:
修改后的client服务完整配置:
client: image: my-client-image:latest deploy: mode: replicated replicas: 1 placement: constraints: - node.role == manager restart_policy: condition: none # 核心配置:任务完成后无论成败都不重启 delay: 0s max_attempts: 0 volumes: - /www:/app/www entrypoint: /entrypoint.sh
关键说明:
- 可以直接删除原来的
restart: "no",因为Swarm模式下该配置不会生效 restart_policy.condition: none是专门针对一次性任务的配置,能确保服务执行完指定命令后直接终止,不会被Swarm重新调度启动- 如果需要服务仅在执行失败时有限次数重启,可调整参数为:
restart_policy: condition: on-failure max_attempts: 3 delay: 5s
内容的提问来源于stack exchange,提问作者PTomasz
相关产品推荐
相关产品推荐

