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

如何让Docker Compose容器持续运行?当前启动后即停止

如何让Docker Compose容器持续运行?

我来帮你排查并解决这个容器停止的问题,先看看你当前配置里的几个核心问题:

问题出在哪?

  1. docker-compose.yml的语法错误
    你在services.execute下面单独放了volume: nocopy: true,这位置不对——nocopy选项应该嵌套在每个具体的volume配置块里,而不是单独拎出来。另外你还写了两次command字段,虽然后面的会覆盖前面的,但语法错误可能导致Compose没正确加载你的命令配置。

  2. 容器默认命令执行完就退出
    你的Dockerfile里设置了ENTRYPOINT /bin/sh和CMD scar init -n SREBlack -i image,容器启动后会执行/bin/sh scar init -n SREBlack -i image,这个命令跑完就结束了。容器的生命周期和主进程绑定,主进程一结束容器就跟着停了。

修正后的docker-compose.yml配置

我帮你把语法修正,同时加上能让容器持续运行的命令:

version: "3.7"
services:
  execute:
    image: abc/SREBlackBoxTester
    labels:
      - mylabelOne="SREBlackBoxTester"
    volumes:
      - type: volume
        source: AWS_CREDENTIALS_FOLDER
        target: /home/scar/.aws
        volume:
          nocopy: true  # 把nocopy放到对应volume的配置块里
      - type: volume
        source: SCAR_CONFIG_FOLDER
        target: /home/scar/.scar
        volume:
          nocopy: true
    command: tail -f /dev/null  # 这个命令会让主进程一直运行,容器就不会停
volumes:
  AWS_CREDENTIALS_FOLDER:
  SCAR_CONFIG_FOLDER:

其他可选方案

如果你更喜欢用循环sleep的方式,也可以把command换成这个:

command: bash -c "while true; do sleep 10; done"

要是你希望容器先执行scar init初始化操作,再保持运行,可以这样写command:

command: bash -c "scar init -n SREBlack -i image && tail -f /dev/null"

原理说明

容器能持续运行的关键是让容器内的主进程一直处于活跃状态,tail -f /dev/null或者无限循环的sleep命令都是让主进程不退出的简单手段,只要主进程不结束,容器就会一直保持运行状态。

内容的提问来源于stack exchange,提问作者Carolyn Cordeiro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 18:48:13