簡體   English   中英

docker-compose.yml 無效

[英]docker-compose.yml invalidate

您好,我有一個用於常規操作的默認配置。 現在我想用第二個 yml 覆蓋第一個 yml 中的東西。 准確地說,是卷的位置。

docker-compose.yml:

...
volumes:
  database:
    driver_opts:
      type: none
      device: /opt/data/database/
      o: bind

但我想在開發時使用默認位置(/var/libs/docker/volumes/project_database/_data)。

根據調用順序是否有選項的優先級? -f a.yml -f b.yml b.yml 將覆蓋 a.yml 或類似的東西?

注釋掉 docker-compose.yml 中的行不是我想要 go 的方式。

在 Docker 文檔中的Compose 中擴展服務指出:

要使用多個覆蓋文件或具有不同名稱的覆蓋文件,您可以使用-f選項指定文件列表。 Compose 按照在命令行中指定的順序合並文件。

因此,在您的示例( docker -f a.yml -f b.yml... )中,后面文件中的定義將增加前面文件中的定義。 默認情況下,Compose 知道docker-compose.override.yml文件,它將以這種方式擴充默認的docker-compose.yml文件,而無需顯式的-f選項。

同一頁面有一個添加和覆蓋配置的規則列表。 如果某物是一個邏輯列表(如expose ),則附加后面文件中的值; 如果是邏輯 map (如environment ),則后面文件中的值替換早期文件中的值; 如果是邏輯標量值(如image ),則使用后面文件中的值。

頂級volumes:沒有具體討論,但我希望它們按照您在本文檔中希望它們的方式運行。 如果兩個文件都為命名卷提供了定義,則后面文件中的定義優先,但僅在一個或另一個中聲明一個卷是有效的。

(這在 Compose Python 代碼中得到證實compose.config.load()采用包含文件名列表的配置並返回合並的字典格式配置。對於除services:它遵循一個通用的load_mapping() ; 除了一些特定的 object 鍵之外,這只是執行一個淺合並,其中后面文件中的完整定義替換早期文件中的定義。注意這意味着您必須在覆蓋中提供所有每個卷的選項文件。)

暫無
暫無

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

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