簡體   English   中英

兄弟容器中的docker-compose execute命令

[英]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套接字暴露給容器的可能性。

  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執行
  • 使用docker-compose.yml為e2e指定entrypoint

安全

請注意,Docker套接字具有很高的特權(就像root一樣)。 因此,公開此套接字可能會帶來安全隱患。 它與在無密碼sudo的系統上執行測試的級別相同,測試不會在具有特權的情況下執行,但是能夠修改您的測試的攻擊者可以使用它來獲得特權訪問。 這可能沒問題,具體取決於您的威脅模型。

要了解威脅,請參閱:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM