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

Docker Python实现宿主机文件挂载:容器创建后异常退出求助

问题分析与修复方案

为什么容器会Exited?

你在Python代码里显式指定了'ls'作为容器启动命令——这个命令执行完就会立刻退出,这是容器停止的核心原因。此外,你的代码还遗漏了原Docker命令中的多个关键配置项。

修复后的完整代码

import docker

# 初始化Docker客户端
client = docker.from_env()

# 创建并配置容器(完全对齐原docker run参数)
container = client.containers.create(
    image='host_config',
    name='container1',
    auto_remove=True,  # 对应原命令的--rm
    tty=True,          # 对应-t(分配伪终端)
    stdin_open=True,   # 对应-i(保持标准输入打开)
    privileged=True,   # 对应--privileged
    binds={
        '/home/config/host_config.xml': {
            'bind': '/opt/confd/etc/confd/init/host_init.xml',
            'mode': 'rw'  # 读写权限,按需改为ro(只读)
        }
    }
)

# 启动容器(之前的代码只创建了容器,未启动)
container.start()

# 若需要进入交互式终端,可执行:
# container.attach(stream=True, stdout=True, stderr=True, stdin=True)

关键修正细节

  1. 移除ls命令:原Docker命令未指定额外命令,会使用镜像默认的ENTRYPOINT/CMD(通常是交互式shell),保持终端交互配置即可让容器持续运行。
  2. 补全缺失参数:
    • auto_remove=True:容器退出后自动清理,对应--rm
    • tty=True+stdin_open=True:实现-it的交互式终端效果,避免容器启动后立即退出
    • privileged=True:开启特权模式,对应原命令的--privileged
  3. 简化挂载配置:使用字典格式的binds更直观,无需单独指定volumes参数(binds会自动处理容器内的挂载点)
  4. 添加启动步骤:原代码仅创建了容器对象,未调用启动方法,容器处于创建未运行状态,启动后才能正常运行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 03:33:19