【发布时间】:2019-01-10 13:05:46
【问题描述】:
我正在使用 docker compose 创建一个容器网络,其中一个容器请求另一个容器运行一个进程。客户端还必须在出现错误或完成时监视这些过程。我的方法是像这样使用python的子进程Popen:
process = subprocess.Popen(cmd,stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
cmd 是['docker-compose', 'exec', 'service2', 'sh', '-c', 'cp sourcefile /destination && python run.py']
但我得到了这个错误
[Errno 2] No such file or directory: 'docker-compose': 'docker-compose'
我尝试在客户端容器上以 bash 模式执行相同的命令并得到
bash: docker-compose: command not found。我想过做一个dind,但这真的有必要吗?此命令适用于我的主机 docker-compose run --rm service2 python apples.py shell。记住什么是正确的方法我需要随时从 service1 查询在容器 service2 中运行的进程的返回码。我宣布了一个桥接网络。谢谢
【问题讨论】:
-
你的镜像中安装了 Docker Compose 吗?
-
不。一般来说,我认为在 docker 中使用 docker 是不好的做法。容器应该共享主机守护进程吗?还需要安装 docker 守护程序才能在容器中使用 docker compose。 '我是新来的,所以真的只是问。这是要走的路吗?
-
您无法运行不在容器中的二进制文件。这并不意味着客户端和服务器端都必须在容器中运行,只是容器必须有自己的
/usr/bin/docker-compose。 -
@DavidMaze 这是最好的方法吗?我声明了一个网络并公开了端口,只是想知道我是否可以避免 DIND。还不如拥有一个虚拟机并将它们全部放在一起,这并不理想?
标签: python bash docker ubuntu docker-compose