使用Python subprocess启动docker-compose失败,报FileNotFoundError
解决Python脚本调用docker-compose找不到的问题
核心原因
终端能正常运行但Python脚本报错,本质是Python子进程的环境变量PATH和你当前终端的PATH不匹配,导致系统找不到docker-compose的可执行文件位置。另外需要注意:新版Docker已将Compose集成到Docker CLI中,现在推荐使用docker compose(空格分隔)替代旧版的docker-compose(连字符分隔)。
可行解决方案
1. 使用docker-compose的绝对路径
先在终端执行以下命令,获取docker-compose的绝对路径:
which docker-compose
输出示例:/usr/local/bin/docker-compose,然后修改Python脚本,把docker-compose替换成这个绝对路径:
compose_path = "path/to/compose" cmd = ["/usr/local/bin/docker-compose", "-f", "docker-compose.yml", "up", "-d"] subprocess.call(cmd, cwd=compose_path)
2. 改用新版Docker Compose命令(推荐)
如果你的Docker版本是v2及以上,直接使用docker compose命令,脚本修改如下:
compose_path = "path/to/compose" cmd = ["docker", "compose", "-f", "docker-compose.yml", "up", "-d"] subprocess.call(cmd, cwd=compose_path)
这种方式无需纠结路径问题,兼容性更强。
3. 给子进程传递完整环境变量
将终端的环境变量直接传递给subprocess子进程,确保它能找到命令路径:
import os import subprocess compose_path = "path/to/compose" cmd = ["docker-compose", "-f", "docker-compose.yml", "up", "-d"] # 复制当前终端的环境变量 env = os.environ.copy() subprocess.call(cmd, cwd=compose_path, env=env)
内容的提问来源于stack exchange,提问作者Kallie
相关产品推荐
相关产品推荐

