為什麼 docker-compose 使用一種語法而不是另一種語法來建立來源目錄?

為什麼 docker-compose 使用一種語法而不是另一種語法來建立來源目錄?

docker-compose.yml考慮我的檔案中設定磁碟區安裝(使用版本 3.7)的以下 YAML 程式碼,使用短格式文法如文檔中所指定:

volumes:
    - ./logging:/var/log/cron

logging這將我的主機上的相對路徑對應到/var/log/cron容器內的資料夾。當我運行時docker-compose up,如果該logging資料夾在我的主機上不存在,Docker 會建立它。那裡一切都好。

現在,如果我將上面的內容更改為長格式文法:

volumes:
    - type: bind
      source: ./logging
      target: /var/log/cron

現在,當我運行時,如果我的主機上不存在該資料夾,docker-compose up它不會建立該資料夾。logging我明白了

Cannot create container for service app: b'Mount denied:\nThe source path "C:/Users/riptusk331/logging"\ndoesn\'t exist and is not known to Docker'

有人知道為什麼短格式語法會建立主機路徑(如果不存在),但長格式不會建立主機路徑並給出錯誤?

使用適用於 Windows 的 Docker 桌面。

答案1

這實際上是舊-v語法的一個「功能」(錯誤),他們不想修復,因為它會破壞人們創建的依賴於該行為的所有數千(數百萬?)實現。

為 Docker Swarm 引入的新--mount磁碟區語法,然後擴展為與原始 Docker CLI 呼叫相容,明確沒有重新引入此功能,因為它是“意外的魔法”,沒有真正記錄,不應該依賴。

相關內容