簡體   English   中英

使用多個 `--file` 選項時,如何設置 Docker 相對於 `.yml` 文件編寫`env_file`?

[英]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

希望對其他人有幫助

如果有人對完整代碼感興趣: backenddocker-compose.ymlhttps://gitlab.com/starting-spark/porter/backend/-/blob/3.4.3/docker-compose.yml#L13-14
backenddocker-compose.override.yml : https://gitlab.com/starting-spark/porter/backend/-/blob/3.4.3/docker-compose.override.yml#L3-4
backend.envhttps://gitlab.com/starting-spark/porter/backend/-/blob/3.4.3/.env
frontenddocker-compose.ymlhttps://gitlab.com/starting-spark/porter/frontend/-/blob/3.2.2/docker-compose.yml#L5-6
frontenddocker-compose.override.ymlhttps://gitlab.com/starting-spark/porter/frontend/-/blob/3.2.2/docker-compose.override.yml#L3-4
frontend.envhttps://gitlab.com/starting-spark/porter/frontend/-/blob/3.2.2/.env#L16

暫無
暫無

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

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