我試圖將我的env_file配置設定為相對于多個docker-compose.yml檔案位置中的每一個,而不是相對于第一個docker-compose.yml.
檔案(https://docs.docker.com/compose/compose-file/compose-file-v3/#env_file)表明這應該是可能的:
如果您使用 docker-compose -f FILE 指定了 Compose 檔案,則 env_file 中的路徑相對于該檔案所在的目錄。
例如,當我發出
docker compose \
--file docker-compose.yml \
--file backend/docker-compose.yml \
--file docker-compose.override.yml up
env_file第二個(即backend/docker-compose.yml)和第三個(即docker-compose.override.yml)中的所有路徑都相對于第一個檔案(即docker-compose.yml)的位置
我希望env_file每個docker-compose.yml檔案中的設定都與定義它的檔案相關。
這可能嗎?
謝謝你的時間??
如果您對背景關系感到好奇:
我想要一個獨立的后端存盤庫,后端開發人員可以在不需要前端容器的情況下對其進行處理。前端 repo 會將后端 repo 作為 Git 子模塊拉進來,因為前端容器需要后端容器作為依賴項。這是我的 2 個回購:
- 后端:https : //gitlab.com/starting-spark/porter/backend
- 前端:https : //gitlab.com/starting-spark/porter/frontend
后端組織如下:
/docker-compose.yml
/docker-compose.override.yml
前端的組織如下:
/docker-compose.yml
/docker-compose.override.yml
/backend/ # pulled in as a Git submodule
/backend/docker-compose.yml
/backend/docker-compose.override.yml
如果我把我的env_file放在docker-compose.override.yml檔案里,一切都正常。后端的覆寫env_file將相對于后端docker-compose.yml。并且前端的覆寫env_file將相對于前端docker-compose.yml。前端永遠不會使用后端的docker-compose.override.yml.
但我想將后端的env_file設定放入后端docker-compose.yml,以便需要后端容器的專案可以繼承并使用它的默認值。如果依賴專案想要覆寫后端的env_file,那么它可以在依賴專案的docker-compose.override.yml.
我希望這是有道理的。
如果有另一種模式來組織處理這種情況的 Docker-Compose 專案,請告訴我。
- 我確實想避免單一回購。
uj5u.com熱心網友回復:
事實證明,已經有一個關于這個的問題和討論:
- https://github.com/docker/compose/issues/3874
該執行緒指出這是預期的行為,并在此處記錄:https : //docs.docker.com/compose/extends/#understanding-multiple-compose-files
當您使用多個組態檔時,您必須確保檔案中的所有路徑都相對于基本 Compose 檔案(使用 -f 指定的第一個 Compose 檔案)。這是必需的,因為覆寫檔案不必是有效的 Compose 檔案。覆寫檔案可以包含配置的小片段。跟蹤服務的哪個片段與哪個路徑相關是困難和混亂的,因此為了使路徑更易于理解,必須相對于基本檔案定義所有路徑。
該討論中有一個解決方法,效果很好:https : //github.com/docker/compose/issues/3874#issuecomment-470311052
解決方法是使用具有默認值的 ENV 變數:
- ${PROXY:-.}/haproxy/conf:/usr/local/etc/haproxy
或者在我的情況下:
env_file:
- ${BACKEND_BASE:-.}/.env
希望能幫到別人??
如果有人對完整代碼感興趣:
backend's docker-compose.yml:https://gitlab.com/starting-spark/porter/backend/-/blob/3.4.3/docker-compose.yml#L13-14
backend 's docker-compose.override.yml:https ://gitlab.com/starting-spark/porter/backend/-/blob/3.4.3/docker-compose.override.yml#L3-4
backend的.env:https ://gitlab.com/starting-spark/porter /backend/-/blob/3.4.3/.env
frontend的docker-compose.yml:https://gitlab.com/starting-spark/porter/frontend/-/blob/3.2.2/docker-compose.yml#L5-6
frontend ' s docker-compose.override.yml:https : //gitlab.com/starting-spark/porter/frontend/-/blob/3.2.2/docker-compose.override.yml#L3-4
frontend的.env:https : //gitlab.com/starting- spark/porter/frontend/-/blob/3.2.2/.env#L16
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/389534.html
標籤:混帐 码头工人 docker-compose git子模块 单体仓库
