卷頂級元素

卷是容器引擎實現的持久資料儲存。Compose 提供了一種中立的方式供服務掛載卷,以及配置引數來將它們分配給基礎設施。頂級 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.projectcom.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