Tengo lo siguiente 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
Lo que lo construí:
$ 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
Sin embargo, cuando se ejecuta, el /opt/myvolume
directorio es propiedad de root
, no 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
porque se creó durante la ejecución.
¿Es posible definir o cambiar el propietario predeterminado del VOLUME
directorio en Dockerfile
?
Lo estoy ejecutando en macOS y Linux.
docker
dockerfile
permissions
kenorb
fuente
fuente
Respuestas:
Como se indica en la documentación , la instrucción VOLUME hereda el contenido del directorio y los permisos existentes en el contenedor, por lo que puede solucionar el problema con un dockerfile como este:
La creación del directorio debe hacerse como root (para poder escribir dentro de / opt).
fuente
VOLUME
después de que se crea el directorio: si algún paso de compilación cambia los datos dentro del volumen después de que se haya declarado, esos cambios serán descartados.Tuve un problema similar, esto funcionó para mí:
Escribe el archivo Docker con:
Ejecute estos comandos bash:
Tenga en cuenta que los nombres, UID, GID deben ser los mismos para el usuario Docker y el usuario host. El último comando bash le dice a la imagen de Docker que ese usuario de host es el mismo que el usuario de directorio de volumen compartido de Docker, por lo que ese directorio de archivo pasa a ser propiedad del "usuario de prueba" en el contenedor de Docker.
fuente