GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Einen NFS-Mount auf dem Host sichtbar machen und im Docker-Container lesen und schreiben

Wie Sie in Ihrem Update angemerkt haben, wird die UID der Dateien nicht in Bind-Mounts abgebildet. So bindet Linux Mounts. Sie können den Container mit einer anderen UID starten, aber dies führt dazu, dass /etc/passwd innerhalb des Containers einem anderen oder sogar keinem (in Ihrem Fall) Benutzer zugeordnet wird. Es gibt verschiedene Optionen, aber ich bevorzuge es, die UID des Containers mit einem usermod-Befehl zu ändern, der innerhalb eines Einstiegspunkts für das Image mit meinem fix-perms-Skript ausgeführt wird. Dies muss als root ausgeführt werden, aber Sie können dann gosu verwenden um beim Ausführen Ihrer Befehle zum Benutzer zurückzukehren. Ich habe darüber in meinen Dockercon-Präsentationen gesprochen.

Beachten Sie, dass Sie anstelle eines Bind-Mounts in das Host-NFS-Verzeichnis auch ein Volume-Mount direkt auf dem NFS-Server durchführen können. Hier sind einige Beispiele dafür:

  # create a reusable volume
  $ docker volume create --driver local \
      --opt type=nfs \
      --opt o=nfsvers=4,addr=nfs.example.com,rw \
      --opt device=:/path/to/dir \
      foo

  # or from the docker run command
  $ docker run -it --rm \
    --mount type=volume,dst=/container/path,volume-driver=local,volume-opt=type=nfs,\"volume-opt=o=nfsvers=4,addr=nfs.example.com\",volume-opt=device=:/host/path \
    foo

  # or to create a service
  $ docker service create \
    --mount type=volume,dst=/container/path,volume-driver=local,volume-opt=type=nfs,\"volume-opt=o=nfsvers=4,addr=nfs.example.com\",volume-opt=device=:/host/path \
    foo

  # inside a docker-compose file
  ...
  volumes:
    nfs-data:
      driver: local
      driver_opts:
        type: nfs
        o: nfsvers=4,addr=nfs.example.com,rw
        device: ":/path/to/dir"
  ...

Linux
  1. Wie man ein Host-Verzeichnis in einen Docker-Container einbindet

  2. Kann Docker in einem Linux-Container ausgeführt werden?

  3. Was befindet sich in einem Docker-Image/Container?

  4. Docker in Docker kann Volume nicht mounten

  5. So führen Sie einen Cron-Job in einem Docker-Container aus

So aktualisieren Sie das Docker-Image und den Container auf die neueste Version

Erstellen eines Containers von Hand unter Verwendung von Namespaces:Der Mount-Namespace

So erhalten Sie die IP-Adresse eines Docker-Containers vom Host

So verwenden Sie Docker Cp zum Kopieren von Dateien zwischen Host und Containern

So kopieren Sie Dateien zwischen Host und Docker-Container

Speicherlimit und CPU-Limit im Docker-Container