gpt4 book ai didi

docker-compose 在兄弟容器中执行命令

转载 作者:行者123 更新时间:2023-11-28 20:37:33 25 4
gpt4 key购买 nike

我正在围绕一些服务构建一个端到端的测试套件。其中一些服务并不是真正的服务。它们实际上是按顺序运行的程序脚本。它们在命令行中执行并接受参数,正如您期望脚本所做的那样。

我们有这些脚本/应用程序的 docker 镜像。我已经将它们编译成一个 docker-compose 文件。它们在那里被定义为与端到端测试套件本身同级的服务。所以,例如:

docker-compose.yml

version: '3.4'
services:
script:
build: https://${GITHUB_ACCESS}:@github.com/company/script.git
image: script:e2e
e2e_tests:
build: .
image: e2e:e2e

现在,e2e 服务需要执行脚本。由于脚本不是服务,我无法进行简单的 api 调用。我如何将命令传递到 script 容器以便从 e2e_tests 容器执行它?

最佳答案

问题

您想调用位于脚本容器(S1,源自图像 script:e2e)来自你的测试容器(T1,源自图像 e2e_tests:e2e)

解决方案

您可以使用 expose the Docker socket 的可能性到一个容器。

  1. 将 Docker 套接字暴露给容器 T1(应该运行测试):

    docker run -it --name T1 --volume /var/run/docker.sock:/var/run/docker.sock e2e_tests:e2e
  2. 现在您可以从容器 T1 中启动其他容器。这也可用于启动脚本容器 S1 并执行命令:

    docker run --name S1 scipt:e2e echo 1
    1

命令的输出(此处为 echo 1)将通过管道传输到 T1,因此您可以直接解析/使用它。


如何将其传输到docker-compose.yml

version: '3.4'
services:
script:
build: https://${GITHUB_ACCESS}:@github.com/company/script.git
image: script:e2e
e2e_tests:
build: .
image: e2e:e2e
volumes: /var/run/docker.sock:/var/run/docker.sock

实际执行测试的位置(反过来必须执行 docker run ... echo 1)取决于您的特定用例。你可以:

  • 直接从 e2eCMD 中执行此操作
  • 写成脚本,由e2eCMD执行
  • 指定entrypoint将 docker-compose.yml 用于 e2e

安全

请注意 docker socket 具有高特权(类似于 root)。因此,公开此套接字可能会带来安全隐患。它与使用无密码 sudo 在系统上执行测试处于同一级别,测试不会以特权权限执行,但是能够修改测试的攻击者可以使用它来获得特权访问。这可能没问题,具体取决于您的威胁模型。

要了解威胁,请参阅:

关于docker-compose 在兄弟容器中执行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48552456/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com