Eu tenho o seguinte 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
Que eu 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
No entanto, quando executado, o /opt/myvolume
diretório pertence root
, não 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 é criado durante a execução.
É possível definir ou alterar o proprietário padrão do VOLUME
diretório Dockerfile
?
Estou executando no macOS e Linux.
docker
dockerfile
permissions
kenorb
fonte
fonte
Respostas:
Conforme declarado na documentação , a instrução VOLUME herda o conteúdo do diretório e as permissões existentes no contêiner, para que você possa solucionar o problema com um dockerfile como este:
A criação do diretório deve ser feita como raiz (para poder escrever em / opt).
fonte
VOLUME
após a criação do diretório: Se alguma etapa de compilação alterar os dados no volume após a declaração, essas alterações serão descartadas.Eu tive um problema semelhante, isso funcionou para mim:
Escreva o arquivo Docker com:
Execute estes comandos bash:
Observe que os nomes, UIDs e GIDs devem ser os mesmos para o usuário do Docker e o usuário do host. O último comando bash informa à imagem do Docker que esse usuário host é o mesmo que o usuário dir do volume compartilhado do Docker, para que o diretório do arquivo se torne propriedade do "testuser" no contêiner do Docker.
fonte