Docker em problemas de Mac e Linux com permissões

2

Estou tendo um problema com as permissões de arquivos criados em volumes compartilhados (infelizmente, isso é um problema comum). Quando executo o seguinte no linux (Ubuntu), o arquivo criado acaba sendo de propriedade de root . Quando executo isso no OSX, o arquivo acaba sendo de propriedade do usuário que executa o comando docker.

cd
mkdir temp-docker
docker run --rm -v ~/temp-docker/:/root/temp ubuntu /bin/touch /root/temp/touched
ls -la temp-docker/touched
# rm -Rf temp-docker

saída do linux

-rw-r--r-- 1 root root 0 Nov 24 09:48 temp-docker/touched

saída do osx

-rw-r--r--  1 MyUser  staff     0B 24 Nov 09:48 temp-docker/touched

Existe uma maneira de imitar facilmente o comportamento do OSX? Ou isso acontece porque o OSX está usando vagrant e vboxsf sob o capô e não há como reproduzi-lo facilmente no linux?

    
por Augusto 24.11.2015 / 10:55

1 resposta

0

Eu não sei sobre 'facilmente', e requer a execução do container como um usuário diferente de root (o que você provavelmente deve fazer de qualquer maneira).

Mas aqui está um exemplo, executando o Docker 1.9

Meu Dockerfile é parecido com isto:

FROM ubuntu:14.04

# Setup user environment
RUN useradd -d /home/dtest -m dtest

# Create a shared data volume
RUN mkdir /var/shared/
RUN chown -R dtest:dtest /var/shared
VOLUME /var/shared

WORKDIR /home/dtest

# Link in shared parts to the home directory
RUN ln -s /var/shared /home/dtest/shared

RUN chown -R dtest: /home/dtest
USER dtest

CMD /bin/bash

Depois de criar minha imagem, vamos chamá-la de dtest/test , eu corro assim:

$ docker run --rm -v $(pwd):/var/shared/ -it dtest/test bash

# on the container:
dtest@33b5a1ee6c62:~$ ls -l
total 0
lrwxrwxrwx 1 dtest dtest 11 Nov 24 20:47 shared -> /var/shared
dtest@33b5a1ee6c62:~$ ls -l shared/
total 4
-rw-r--r-- 1 dtest staff 642 Nov 24 20:47 Dockerfile
dtest@33b5a1ee6c62:~$ echo "Test" > /var/shared/foo
dtest@33b5a1ee6c62:~$ ls -l $(pwd)/shared/
total 8
-rw-r--r-- 1 dtest staff 642 Nov 24 20:47 Dockerfile
-rw-r--r-- 1 dtest staff   5 Nov 24 20:52 foo

# on the OSX host
$ ls -l
total 16
-rw-r--r--  1 dtest  staff  642 Nov 24 15:47 Dockerfile
-rw-r--r--  1 dtest  staff    5 Nov 24 15:52 foo

Isso funcionou no Docker 1.8.x também, embora eu tenha que adicionar um arquivo vazio em / var / shared antes de adicioná-lo como VOLUME :

# Create a shared data volume
# We need to create an empty file, otherwise the volume will
# belong to root.
# This is probably a Docker bug.
RUN mkdir /var/shared/
RUN touch /var/shared/placeholder
RUN chown -R dtest:dtest /var/shared
VOLUME /var/shared

O crédito para este método vai para este post de blog sobre a dica de criar um devbox.

    
por 24.11.2015 / 22:00

Tags