卷頂級元素
volumes
宣告使您能夠配置可在多個服務之間重複使用的命名卷。要在多個服務之間使用卷,您必須使用 services
頂級元素內的 volumes 屬性顯式地授予每個服務訪問許可權。volumes
屬性具有其他語法,可提供更細粒度的控制。
提示
處理大型儲存庫或單體儲存庫,或者使用不再隨程式碼庫一起擴充套件的虛擬檔案系統?Compose 現在利用了 同步檔案共享 並自動為繫結掛載建立檔案共享。確保您已使用付費訂閱登入到 Docker,並且已在 Docker Desktop 設定中啟用了 **訪問實驗性功能** 和 **使用 Compose 管理同步檔案共享**。
示例
以下示例顯示了一個兩個服務設定,其中資料庫的資料目錄作為名為 db-data
的卷與另一個服務共享,以便可以定期備份。
services:
backend:
image: example/database
volumes:
- db-data:/etc/data
backup:
image: backup-service
volumes:
- db-data:/var/lib/backup/data
volumes:
db-data:
db-data
卷分別掛載在 /var/lib/backup/data
和 /etc/data
容器路徑上,分別用於備份和後端。
執行 docker compose up
會在卷不存在的情況下建立該卷。否則,將使用現有卷,如果該卷在 Compose 之外被手動刪除,則會重新建立。
屬性
頂級 volumes
部分下的條目可以為空,在這種情況下,它使用容器引擎的預設配置來建立卷。可選地,您可以使用以下鍵配置它
driver
指定應使用哪個卷驅動程式。如果驅動程式不可用,Compose 將返回錯誤,並且不會部署應用程式。
volumes:
db-data:
driver: foobar
driver_opts
driver_opts
指定了一個鍵值對形式的選項列表,這些選項會被傳遞給當前卷的驅動程式。選項由驅動程式決定。
volumes:
example:
driver_opts:
type: "nfs"
o: "addr=10.40.0.199,nolock,soft,rw"
device: ":/docker/example"
external
如果設定為 true
external
表示此卷已存在於平臺上,其生命週期由應用程式外部管理。Compose 不會建立卷,如果卷不存在則返回錯誤。- 除了
name
之外的所有其他屬性都無關緊要。如果 Compose 檢測到任何其他屬性,它會將 Compose 檔案視為無效。
在下面的示例中,Compose 不會嘗試建立名為 {project_name}_db-data
的卷,而是查詢一個名為 db-data
的現有卷,並將其掛載到 backend
服務的容器中。
services:
backend:
image: example/database
volumes:
- db-data:/etc/data
volumes:
db-data:
external: true
labels
labels
用於向卷新增元資料。您可以使用陣列或字典。
建議您使用反向 DNS 表示法,以防止您的標籤與其他軟體使用的標籤發生衝突。
volumes:
db-data:
labels:
com.example.description: "Database volume"
com.example.department: "IT/Ops"
com.example.label-with-empty-value: ""
volumes:
db-data:
labels:
- "com.example.description=Database volume"
- "com.example.department=IT/Ops"
- "com.example.label-with-empty-value"
Compose 設定 com.docker.compose.project
和 com.docker.compose.volume
標籤。
name
name
為卷設定自定義名稱。name 欄位可用於引用包含特殊字元的卷。此名稱按原樣使用,不會與堆疊名稱進行範圍限定。
volumes:
db-data:
name: "my-app-data"
這使得可以將此查詢名稱作為 Compose 檔案的引數,以便卷的模型 ID 被硬編碼,但平臺上的實際卷 ID 在部署期間的執行時設定。
例如,如果您的 .env
檔案中存在 DATABASE_VOLUME=my_volume_001
volumes:
db-data:
name: ${DATABASE_VOLUME}
執行 docker compose up
使用名為 my_volume_001
的卷。
它還可以與 external
屬性結合使用。這意味著用於在平臺上查詢實際卷的名稱與用於在 Compose 檔案中引用卷的名稱分開設定。
volumes:
db-data:
external: true
name: actual-name-of-volume