[英]How to set Docker Compose `env_file` relative to `.yml` file when multiple `--file` option is used?
我正在嘗試將我的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
第二個(即backend/docker-compose.yml
)和第三個(即docker-compose.override.yml
)中的所有env_file
路徑都相對於第一個文件的位置(即docker-compose.yml
)
我希望每個docker-compose.yml
文件中的env_file
設置都與定義它的文件相關。
這可能嗎?
感謝您的時間
如果您對上下文感到好奇:
我想要一個自包含的后端存儲庫,后端開發人員可以在不需要前端容器的情況下對其進行處理。 前端 repo 將作為 Git 子模塊拉入后端 repo,因為前端容器需要后端容器作為依賴項。 這是我的 2 個回購:
后端是這樣組織的:
/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 項目,請告訴我。
事實證明,已經有一個關於這個的問題和討論:
該線程指出這是預期的行為,並在此處記錄: https://docs.docker.com/compose/extends/#understanding-multiple-compose-files
當您使用多個配置文件時,您必須確保文件中的所有路徑都相對於基本 Compose 文件(使用 -f 指定的第一個 Compose 文件)。 這是必需的,因為覆蓋文件不必是有效的 Compose 文件。 覆蓋文件可以包含配置的小片段。 跟蹤服務的哪個片段與哪個路徑相關是困難且令人困惑的,因此為了使路徑更易於理解,必須相對於基本文件定義所有路徑。
該討論中有一個非常有效的解決方法: https://github.com/docker/compose/issues/3874#issuecomment-470311052
解決方法是使用具有默認值的 ENV var:
- ${PROXY:-.}/haproxy/conf:/usr/local/etc/haproxy
或者在我的情況下:
env_file:
- ${BACKEND_BASE:-.}/.env
希望對其他人有幫助
如果有人對完整代碼感興趣: backend
的docker-compose.yml
: https://gitlab.com/starting-spark/porter/backend/-/blob/3.4.3/docker-compose.yml#L13-14
backend
的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
的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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.