簡體   English   中英

Docker:更改文件夾存儲docker卷的位置

[英]Docker: change folder where to store docker volumes

在我的Ubuntu EC2我使用docker容器托管應用程序。 db數據和upload數據存儲在使用以下命令創建的卷CaseBook-data-dbCaseBook-data-uploads

docker volume create --name=CaseBook-data-db
docker volume create --name=CaseBook-data-uploads

通過docker-compose文件附加的卷:

version: '2'
services:
    mongo:
        container_name: "CaseBook-db"
        restart: always
        image: mongo:3.2.7
        ports:
            - "27017"
        volumes:
            - data_db:/data/db
        labels:
            - "ENVIRONMENT_TYPE=meteor"

    app:
        container_name: "CaseBook-app"
        restart: always
        image: "meteor/casebook"
        build: .
        depends_on:
            - mongo
        environment:
            - MONGO_URL=mongodb://mongo:27017/CaseBook
        ports:
            - "80:3000"
        volumes:
            - data_uploads:/Meteor-CaseBook-Container/.uploads
        labels:
            - "ENVIRONMENT_TYPE=meteor"
volumes:
     data_db:
        external:
            name: CaseBook-data-db
     data_uploads:
        external:
            name: CaseBook-data-uploads

我需要將這些docker卷存儲在主機的不同文件夾(例如/home/ubuntu/data/ )中。 如何更改卷的docker存儲文件夾? 或者有更好的方法來做到這一點? 先感謝您。

命名卷將存儲在docker的文件夾(/ var / lib / docker)中。 如果要在特定主機文件夾中創建卷,請使用具有以下語法的主機卷:

docker run -v /home/ubuntu/data/app-data:/app-data my-image

或者從你的撰寫文件中:

version: '2'
services:
    mongo:
        container_name: "CaseBook-db"
        restart: always
        image: mongo:3.2.7
        ports:
            - "27017"
        volumes:
            - /home/ubuntu/data/db:/data/db
        labels:
            - "ENVIRONMENT_TYPE=meteor"

    app:
        container_name: "CaseBook-app"
        restart: always
        image: "meteor/casebook"
        build: .
        depends_on:
            - mongo
        environment:
            - MONGO_URL=mongodb://mongo:27017/CaseBook
        ports:
            - "80:3000"
        volumes:
            - /home/ubuntu/data/uploads:/Meteor-CaseBook-Container/.uploads
        labels:
            - "ENVIRONMENT_TYPE=meteor"

對於主機卷,映像中卷的任何內容都將與主機文件夾的確切內容重疊,包括主機文件夾的UID。 未按空白命名卷的方式從映像初始化空主機文件夾。 UID映射往往是使用主機卷最困難的部分。


編輯:從下面的評論中,如果您需要一個充當主機卷的命名卷,則會在docker的插件列表中列出一個本地持久卷插件 安裝插件后,您可以創建指向主機文件夾的卷,其功能即使在刪除指定卷后,主機目錄也會被遺忘。 插件的示例用法包括:

docker volume create -d local-persist -o mountpoint=/data/images --name=images
docker run -d -v images:/path/to/images/on/one/ one
docker run -d -v images:/path/to/images/on/two/ two

它們還包含一個v2 compose文件,其中包含以下卷示例:

volumes:
  data:
    driver: local-persist
    driver_opts:
      mountpoint: /data/local-persist/data

我在過去一個月中已經意識到的另一個選項是使用本地卷驅動程序的掛載選項來手動創建綁定掛載。 這與docker中的主機卷類似,但有以下區別:

  • 如果該目錄不存在,則嘗試啟動具有指向綁定裝入的命名卷的容器將失敗。 對於主機卷,docker會將其初始化為root擁有的空目錄。
  • 如果目錄為空,則命名卷將使用安裝位置處的映像內容初始化綁定裝入,包括文件和目錄所有權/權限。 使用主機卷時,不會初始化主機目錄內容。

要將命名卷創建為綁定裝載,可以使用以下命令預先創建它:

docker volume create --driver local \
  --opt type=none \
  --opt device=/home/user/test \
  --opt o=bind \
  test_vol

--mount docker run命令,可以使用--mount完成:

docker run -it --rm \
    --mount type=volume,dst=/container/path,volume-driver=local,volume-opt=type=none,volume-opt=o=bind,volume-opt=device=/home/user/test \
    foo

或者在撰寫文件中,您可以使用以下命令創建命名卷:

volumes:
  data:
    driver: local
    driver_opts:
      type: none
      o: bind 
      device: /home/user/test 

如果您需要命名的卷功能,我的首選是使用本地驅動程序而不是local-persist第三方驅動程序使用命名卷。

內置驅動程序本地的另一種方法:

docker volume create --opt type=none --opt device=/home/ubuntu/data/ --opt o=bind data_db

(這使用DimonVersace示例: data_db在docker -compose中聲明為外部命名卷,而/ home / ubuntu / data /在主機上聲明為文件夾)

暫無
暫無

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

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