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)
关键修正细节
- 移除
ls命令:原Docker命令未指定额外命令,会使用镜像默认的ENTRYPOINT/CMD(通常是交互式shell),保持终端交互配置即可让容器持续运行。 - 补全缺失参数:
auto_remove=True:容器退出后自动清理,对应--rmtty=True+stdin_open=True:实现-it的交互式终端效果,避免容器启动后立即退出privileged=True:开启特权模式,对应原命令的--privileged
- 简化挂载配置:使用字典格式的
binds更直观,无需单独指定volumes参数(binds会自动处理容器内的挂载点) - 添加启动步骤:原代码仅创建了容器对象,未调用启动方法,容器处于创建未运行状态,启动后才能正常运行
内容的提问来源于stack exchange,提问作者Aaren
相关产品推荐
相关产品推荐

