簡體   English   中英

Docker 更改命名卷的位置

[英]Docker change location of named volumes

我有一個我無法理解的問題。 我正在使用 docker 來運行某些容器,但我至少有一個卷有問題,我不想問是否有人可以提示我做錯了什么。 我以 Nifi-Ingestion 為例,但它會影響更多的容器體積。

首先說一下我使用的版本:

  • Docker 版本 19.03.8,構建 afacb8b7f0
  • docker-compose 版本 1.27.4,構建 40524192
  • Ubuntu 20.04.1 LTS

現在,讓我們在我的工作 docker-compose-file 中顯示卷:

在我的容器中,它的配置如下:

volumes:
    - nifi-ingestion-conf:/opt/nifi/nifi-current/conf

在我的 docker-compose 文件下面,它被定義為一個普通的命名卷:

volumes:
    nifi-ingestion-conf:

這是 docker-compose 的一個片段,我想開始工作

在我的容器中,在這種情況下配置如下(將我的 STORAGE_VOLUME_PATH 定義為 /mnt/storage/docker_data):

volumes:
    - ${STORAGE_VOLUME_PATH}/nifi-ingestion-conf:/opt/nifi/nifi-current/conf

在底部,我想有一些事情要做,但我不知道我需要在這里做什么。 在這種情況下,它與工作中的 docker-compose 相同:

volumes:
    nifi-ingestion-conf:

那么,現在我的問題是什么?

我有兩個 docker-compose 文件。 一個使用普通的命名卷,一個使用我的額外掛載路徑中的卷。 當我運行容器時,卷的工作方式似乎有所不同,因為文件是用第一種風格編寫的,而不是第二種風格。 我的掛載路徑是在第二個版本中生成的,因此 .env 文件中的環境變量沒有任何問題。

提示:/mnt/storage/docker_data 是一個 NFS 掛載,但我的機器擁有該共享的全部權限。

這是我掛載該卷的 fstab 條目(也許我必須設置其他選項):

10.1.0.2:/docker/data               /mnt/storage/docker_data        nfs     auto,rw

更大的片段

如果 docker-compose 是一個更大的片段(我需要剪切和刪除有信心的數據,我的問題不是它不起作用,只是音量不同。這一卷的所有內容都在代碼中。):

version: "3"
services:
    nifi-ingestion:
        image: my image on my personal repo
        container_name: nifi-ingestion
        ports:
            - 0000
        labels:
            - app-specivic
        volumes:
            - ${STORAGE_VOLUME_PATH}/nifi-ingestion-conf:/opt/nifi/nifi-current/conf
            #working: - nifi-ingestion-conf:/opt/nifi/nifi-current/conf
        environment:
            - app-specivic
        networks:
            - cnetwork

volumes:
    nifi-ingestion-conf:

networks:
    cnetwork:
        external: false
        ipam:
            driver: default
            config:
                - subnet: 192.168.1.0/24

這里的 env (只有我們正在使用的值)

STORAGE_VOLUME_PATH=/mnt/storage/docker_data

如果我正確理解了您的問題,您想知道為什么以下 docker-compose 片段對您有用

version: "3"
services:
  nifi-ingestion:
    volumes:
       - nifi-ingestion-conf:/opt/nifi/nifi-current/conf
volumes:
  nifi-ingestion-conf:

以下 docker-compose 片段對您不起作用

version: "3"
services:
  nifi-ingestion:
    volumes:
      - ${STORAGE_VOLUME_PATH}/nifi-ingestion-conf:/opt/nifi/nifi-current/conf

使它們不同的是您使用卷的方式。 您需要區分掛載主機路徑和掛載命名卷

您可以將主機路徑掛載為單個服務定義的一部分,無需在頂級volumes鍵中定義它。

但是,如果您想跨多個服務重用一個卷,則在頂級volumes鍵中定義一個命名卷。

命名卷由 docker 管理

如果您使用尚不存在的卷啟動容器,Docker 會為您創建卷。

另外,建議您閱讀此答案

更新:您可能還想了解docker nfs 卷

暫無
暫無

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

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