
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 呼叫相容,明確沒有重新引入此功能,因為它是“意外的魔法”,沒有真正記錄,不應該依賴。