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

为何docker-compose up直接退出,docker-compose run可进入bash?

Docker Compose up 容器立即退出但 run 能进入bash的原因及解决

核心原因很简单:docker-compose up默认不给容器分配终端(tty),也不保持标准输入打开,当你执行/opt/bb/bin/bash时,bash在非交互、无输入的环境下会直接退出(返回码0是正常退出的标志);而docker-compose run默认会自动添加-i(保持标准输入打开)和-t(分配tty)参数,让bash进入交互模式,所以能维持会话。

两者的关键差异

  • docker-compose up:以服务模式启动容器,默认不配置tty和stdin,bash作为非交互进程,没有输入就会立即结束
  • docker-compose run:以一次性任务模式启动容器,默认开启交互终端支持,bash会等待用户输入,保持运行状态

解决办法

如果想让docker-compose up启动后容器保持运行并支持交互,只需在docker-compose.yaml的service配置里添加tty: true和stdin_open: true:

version: "3.7"

services:
    svc:
        build:
            context: .
            dockerfile: Dockerfile
        volumes:
            - .:/workarea/svc
        command: ["/opt/bb/bin/bash"]
        tty: true
        stdin_open: true

修改后执行docker-compose up,容器会保持前台运行,你可以直接在当前终端进行交互;如果想后台运行,加上-d参数,之后用docker-compose exec svc /opt/bb/bin/bash进入容器会话。

如果不需要交互,只是想让容器保持运行,可以把command替换为持续运行的命令,比如tail -f /dev/null,这样容器会一直处于运行状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 19:50:37