Estou tentando adicionar um arquivo a uma imagem do Docker criada a partir da tomcat
imagem oficial . Essa imagem parece não ter direitos de root, pois estou logado como usuário tomcat
se executar o bash:
docker run -it tomcat /bin/bash
tomcat@06359f7cc4db:/usr/local/tomcat$
Se eu instruir a Dockerfile
para copiar um arquivo para esse contêiner, o arquivo tem permissões 644
e o proprietário é root
. Pelo que entendi, isso parece razoável, pois todos os comandos no Dockerfile são executados como raiz. No entanto, se eu tentar alterar a propriedade desse arquivo tomcat:tomcat
, recebo um Operation not permitted
erro.
Por que não consigo alterar as permissões de um arquivo copiado para essa imagem?
Como pode ser reproduzido:
mkdir docker-addfilepermission
cd docker-addfilepermission
touch test.txt
echo 'FROM tomcat
COPY test.txt /usr/local/tomcat/webapps/
RUN chown tomcat:tomcat /usr/local/tomcat/webapps/test.txt' > Dockerfile
docker build .
A saída de docker build .
:
Sending build context to Docker daemon 3.072 kB
Sending build context to Docker daemon
Step 0 : FROM tomcat
---> 44859847ef64
Step 1 : COPY test.txt /usr/local/tomcat/webapps/
---> Using cache
---> a2ccb92480a4
Step 2 : RUN chown tomcat:tomcat /usr/local/tomcat/webapps/test.txt
---> Running in 208e7ff0ec8f
chown: changing ownership of '/usr/local/tomcat/webapps/test.txt': Operation not permitted
2014/11/01 00:30:33 The command [/bin/sh -c chown tomcat:tomcat /usr/local/tomcat/webapps/test.txt] returned a non-zero code: 1
root
? Por que eles não levamUSER
em conta a diretiva?Desde o Docker 17.09, é possível usar o
--chown
sinalizador nas operações ADD / COPY no Dockerfile para alterar o proprietário na própria etapa ADD / COPY, em vez de uma operação RUN separada com chown, que aumenta o tamanho da imagem como você observou. Seria bom ter isso como o modo padrão, ou seja, as permissões do usuário que copia os arquivos são aplicadas aos arquivos copiados. No entanto, a equipe do Docker não quis interromper a compatibilidade com versões anteriores e, portanto, introduziu um novo sinalizador.As outras alternativas são:
fonte