[英]docker-compose execute command in sibling container
我正在圍繞許多服務構建端到端測試套件。 其中一些服務並不是真正的服務。 它們實際上是按順序運行的過程腳本。 它們在命令行執行並接受參數,就像您期望腳本執行的那樣。
我們有這些腳本/應用程序的docker映像。 我已經將它們編譯成docker-compose文件。 它們在此處定義為與端到端測試套件本身同級的服務。 因此,例如:
泊塢窗,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調用。 我如何將命令從e2e_tests容器傳遞到script
容器以執行該命令?
問題
您想從測試容器( T1
,從圖像e2e_tests:e2e
派生)調用位於腳本容器( S1
,從圖像script:e2e
派生)內部的命令(例如echo 1
)。
解
您可以利用將Docker套接字暴露給容器的可能性。
將Docker套接字公開到容器T1
(應該運行測試):
docker run -it --name T1 --volume /var/run/docker.sock:/var/run/docker.sock e2e_tests:e2e
現在,您可以從容器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
的CMD
中執行此操作 e2e
的CMD
執行 e2e
指定entrypoint
安全
請注意,Docker套接字具有很高的特權(就像root一樣)。 因此,公開此套接字可能會帶來安全隱患。 它與在無密碼sudo的系統上執行測試的級別相同,測試不會在具有特權的情況下執行,但是能夠修改您的測試的攻擊者可以使用它來獲得特權訪問。 這可能沒問題,具體取決於您的威脅模型。
要了解威脅,請參閱:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.