sql >> Databáze >  >> NoSQL >> MongoDB

Docker:změňte složku, kam se mají ukládat svazky dockeru

Pojmenované svazky budou uloženy ve složce dockeru (/var/lib/docker). Pokud chcete vytvořit svazek v konkrétní hostitelské složce, použijte hostitelský svazek s následující syntaxí:

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

Nebo z vašeho nového souboru:

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"

U hostitelských svazků bude jakýkoli obsah svazku uvnitř obrazu překryt přesným obsahem hostitelské složky, včetně UID hostitelské složky. Prázdná složka hostitele není inicializována z obrazu jako prázdný pojmenovaný svazek. Mapování UID bývá nejobtížnější částí používání hostitelského svazku.

Upravit:Z komentářů níže, pokud potřebujete pojmenovaný svazek, který funguje jako hostitelský svazek, existuje plugin pro místní trvalé svazky, který je uveden v seznamu pluginů dockeru. Po instalaci pluginu můžete vytvářet svazky, které odkazují na hostitelské složky, s funkcí, že i po odebrání pojmenovaného svazku zůstane hostitelský adresář ponechán. Ukázkové použití z pluginu zahrnuje:

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

Zahrnují také složený soubor v2 s následujícím příkladem svazku:

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

Další možností, na kterou jsem byl upozorněn v minulém měsíci, je použití možností připojení ovladače místního svazku k ručnímu vytvoření připojení připojení. Je to podobné jako svazek hostitele v dockeru s následujícími rozdíly:

  • Pokud adresář neexistuje, pokus o spuštění kontejneru s pojmenovaným svazkem ukazujícím na připojení vazby selže. U svazků hostitele je docker inicializuje do prázdného adresáře vlastněného uživatelem root.
  • Pokud je adresář prázdný, pojmenovaný svazek inicializuje připojení k připojení s obsahem obrazu v místě připojení, včetně vlastnictví/oprávnění souborů a adresářů. U hostitelského svazku nedochází k žádné inicializaci obsahu hostitelského adresáře.

Chcete-li vytvořit pojmenovaný svazek jako připojení k připojení, můžete jej vytvořit předem pomocí:

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

Z docker run lze to provést pomocí --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

Nebo v novém souboru můžete vytvořit pojmenovaný svazek pomocí:

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

Pokud potřebujete funkce pojmenovaného svazku, upřednostňuji použití pojmenovaného svazku s místním ovladačem namísto místního ovladače třetí strany.



  1. nemůže zabít redis-server na linuxu

  2. Jaké jsou důsledky zákazu klepů, mísení a tlukotu srdce pro dělníky celeru?

  3. MongoDB $first Aggregation Pipeline Operator

  4. Nelze vytvořit index v mongodb, klíč je příliš velký na indexování