sql >> Databasteknik >  >> NoSQL >> MongoDB

Docker:ändra mapp där dockningsvolymer ska lagras

Namngivna volymer kommer att lagras i dockers mapp (/var/lib/docker). Om du vill skapa en volym i en specifik värdmapp, använd en värdvolym med följande syntax:

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

Eller från din skrivfil:

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"

Med värdvolymer kommer allt innehåll i volymen inuti bilden att läggas över det exakta innehållet i värdmappen, inklusive UID:n för värdmappen. En tom värdmapp initieras inte från bilden som en tom namngiven volym är. UID-mappningar tenderar att vara den svåraste delen av att använda en värdvolym.

Redigera:från kommentarerna nedan, om du behöver en namngiven volym som fungerar som en värdvolym, finns det ett lokalt beständig volym-plugin som är listat på dockers plugin-lista. Efter att ha installerat plugin-programmet kan du skapa volymer som pekar på värdmappar, med funktionen att även efter att du tagit bort den namngivna volymen blir värdkatalogen kvar. Exempelanvändning från pluginet inkluderar:

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

De innehåller också en v2-skrivfil med följande volymexempel:

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

Ett ytterligare alternativ som jag har blivit medveten om den senaste månaden är att använda monteringsalternativen för den lokala volymdrivrutinen för att manuellt skapa en bindningsmontering. Detta liknar en värdvolym i docker med följande skillnader:

  • Om katalogen inte existerar kommer det att misslyckas att försöka starta en behållare med en namngiven volym som pekar på en bindningsmontering. Med värdvolymer kommer docker att initiera den till en tom katalog som ägs av root.
  • Om katalogen är tom, kommer en namngiven volym att initiera bindningsmonteringen med innehållet i bilden på monteringsplatsen, inklusive fil- och katalogägande/behörigheter. Med en värdvolym finns det ingen initiering av värdkatalogens innehåll.

För att skapa en namngiven volym som bindningsfäste kan du skapa den i förväg med:

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

Från en docker run kommandot kan detta göras med --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

Eller i en skrivfil kan du skapa den namngivna volymen med:

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

Jag föredrar att använda den namngivna volymen med den lokala drivrutinen istället för den lokala drivrutinen från tredje part om du behöver de namngivna volymfunktionerna.



  1. Hur man använder decimaltyp i MongoDB

  2. 8 sätt att få dagen från en dejt i MongoDB

  3. Mongoose uppdatering/upsert?

  4. Snabbaste sättet att ta bort dubbletter av dokument i mongodb