【问题标题】:docker-compose exec causes [Errno 2] No such file or directory: 'docker-compose': 'docker-compose' in docker containerdocker-compose exec 导致 [Errno 2] No such file or directory: 'docker-compose': 'docker-compose' in docker container
【发布时间】: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


【解决方案1】:

我尝试了来自here 的建议添加

COPY --from=library/docker:latest /usr/local/bin/docker /usr/bin/docker COPY --from=docker/compose:1.23.2 /usr/local/bin/docker-compose /usr/bin/docker-compose 到我的 dockerfile 并且能够使用原始的 docker-compose 命令。仍然不确定最佳实践是否有效。

编辑:添加到上面我设置还在我的docker文件中为docker主机设置了一个环境变量,例如RUN export DOCKER_HOST="tcp://0.0.0.0:2375"现在docker-compose service2 exec -c 'cmd'subprocess.Popen在service1容器内创建。

【讨论】:

    【解决方案2】:

    在您的命令中,使用您机器上 docker-compose 可执行文件的绝对路径。

    【讨论】:

    • 嗨,Matias,我有一个 docker-compose.yml。是不是和.exe一样。我在 ubuntu 16.04 顺便说一句。你能举例说明你将如何做到这一点吗?谢谢
    • @mikey1 登录到运行它的主机后,尝试运行which docker-compose 以找到该可执行文件的完整路径。这就是你的 Python 命令中应该包含的内容,而不仅仅是“docker-compose”。希望这会有所帮助
    • 我做了 which docker-compose 但仍然在容器中以 bash 模式 bash: /usr/local/bin/docker-compose: No such file or directory 得到这个。
    • 路径示例(可能来自您的平台)或有关如何查找绝对路径的提示会很有用。
    • 当然——在我的 amazon linux 主机上,docker-compose 可执行文件位于此处:/usr/local/bin/docker-compose——我通过运行命令 which docker-compose 找到了它的确切位置
    猜你喜欢
    • 2021-06-05
    • 2021-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    • 2022-01-16
    • 2019-07-22
    相关资源
    最近更新 更多