docker compose在同级容器中执行命令
我正在围绕许多服务构建端到端测试套件。其中有些服务不是真正的服务。它们实际上是按顺序运行的过程脚本。这些命令在命令行执行,并接受参数,正如您希望脚本所做的那样 我们有这些脚本/应用程序的docker图像。我已将它们编译成docker compose文件。它们被定义为与端到端测试套件本身同级的服务。例如: docker compose.ymldocker compose在同级容器中执行命令,docker,testing,docker-compose,end-to-end,Docker,Testing,Docker Compose,End To End,我正在围绕许多服务构建端到端测试套件。其中有些服务不是真正的服务。它们实际上是按顺序运行的过程脚本。这些命令在命令行执行,并接受参数,正如您希望脚本所做的那样 我们有这些脚本/应用程序的docker图像。我已将它们编译成docker compose文件。它们被定义为与端到端测试套件本身同级的服务。例如: docker compose.yml version: '3.4' services: script: build: https://${GITHUB_ACCESS}:@github
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调用。如何将命令从e2e_测试容器传递到
脚本
容器以执行它?问题
您想从测试容器(T1
,从图像e2e测试:e2e
)调用位于脚本容器(S1
,从图像e2e\u测试:e2e
)内的命令(比方说echo 1
)
解决方案
你可以利用这个可能性把它装到一个容器里
T1
(应运行测试):
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)取决于您的特定用例。你可以:
- 直接从
e2e
- 将其放入脚本中,由
e2e的
执行CMD
- 使用docker-compose.yml为
e2e
安全性 请注意docker套接字是高度特权的(它类似于root)。因此,公开这个套接字可能会带来安全隐患。它与使用无密码sudo在系统上执行测试处于同一级别,测试不会以特权权限执行,但能够修改测试的攻击者可以使用它获得特权访问。这可能没问题,取决于您的威胁模型 要了解威胁,请参阅:
e2e_测试
服务添加volumes
关键字,例如:volumes:-/var/run/docker.sock:/var/run/docker.sock脚本
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