Ich habe folgendes Dockerfile
:
FROM ubuntu:xenial
RUN useradd -d /home/ubuntu -ms /bin/bash -g root -G sudo -p ubuntu ubuntu
WORKDIR /home/ubuntu
USER ubuntu
VOLUME /opt/myvolume
Was ich gebaut habe:
$ docker build -t vol-test .
Sending build context to Docker daemon 2.048kB
Step 1/5 : FROM ubuntu:xenial
---> 0b1edfbffd27
Step 2/5 : RUN useradd -d /home/ubuntu -ms /bin/bash -g root -G sudo -p ubuntu ubuntu
---> Using cache
---> d82e3ecc5fe8
Step 3/5 : WORKDIR /home/ubuntu
---> Using cache
---> ab1db29ee8bf
Step 4/5 : USER ubuntu
---> Using cache
---> 129393a35d9e
Step 5/5 : VOLUME /opt/myvolume
---> Running in 691a4cbd077e
Removing intermediate container 691a4cbd077e
---> 11bc9e9db9d3
Successfully built 11bc9e9db9d3
Successfully tagged vol-test:latest
Beim Ausführen gehört das /opt/myvolume
Verzeichnis jedoch root
nicht ubuntu
:
$ docker run vol-test id
uid=1000(ubuntu) gid=0(root) groups=0(root),27(sudo)
$ docker run vol-test find /opt/myvolume -ls
66659 4 drwxr-xr-x 2 root root 4096 Jul 18 23:02 /opt/myvolume
$ docker run -u ubuntu vol-test find /opt/myvolume -ls
66940 4 drwxr-xr-x 2 root root 4096 Jul 18 23:12 /opt/myvolume
weil es während des Laufs erstellt wird.
Ist es möglich, den Standardbesitzer des VOLUME
Verzeichnisses in zu definieren oder zu ändern Dockerfile
?
Ich verwende es unter MacOS und Linux.
docker
dockerfile
permissions
Kenorb
quelle
quelle
Antworten:
Wie in der Dokumentation angegeben , erbt die VOLUME-Anweisung den Verzeichnisinhalt und die im Container vorhandenen Berechtigungen, sodass Sie das Problem mit einer Docker-Datei wie der folgenden umgehen können:
Die Erstellung des Verzeichnisses muss als root erfolgen (um in / opt schreiben zu können).
quelle
VOLUME
nachdem das Verzeichnis erstellt wurde: Wenn Build-Schritte die Daten innerhalb des Volumes ändern, nachdem sie deklariert wurden, werden diese Änderungen verworfen.Ich hatte ein ähnliches Problem, das hat bei mir funktioniert:
Schreiben Sie eine Docker-Datei mit:
Führen Sie die folgenden Bash-Befehle aus:
Beachten Sie, dass die Namen, UIDs und GIDs für den Docker-Benutzer und den Host-Benutzer identisch sein müssen. Der letzte Bash-Befehl teilt dem Docker-Image mit, dass dieser Hostbenutzer mit dem Benutzer des freigegebenen Docker-Volume-Verzeichnisses identisch ist, sodass das Dateiverzeichnis dann dem "Testbenutzer" im Docker-Container gehört.
quelle