Próbuję dodać plik do obrazu Docker zbudowanego z oficjalnego tomcat
obrazu. Ten obraz nie wydaje się mieć praw root, ponieważ jestem zalogowany jako użytkownik, tomcat
jeśli uruchomię bash:
docker run -it tomcat /bin/bash
tomcat@06359f7cc4db:/usr/local/tomcat$
Jeśli polecę Dockerfile
skopiować plik do tego kontenera, plik ma uprawnienia, 644
a właścicielem jest root
. O ile rozumiem, wydaje się to rozsądne, ponieważ wszystkie polecenia w pliku Docker są uruchamiane jako root. Jeśli jednak spróbuję zmienić właściciela tego pliku na tomcat:tomcat
, pojawia się Operation not permitted
błąd.
Dlaczego nie mogę zmienić uprawnień do pliku skopiowanego do tego obrazu?
Jak można go powielać:
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 .
Wyjście 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
? Dlaczego nie uwzględniająUSER
dyrektywy?Od Dockera 17.09 można używać
--chown
flagi w operacjach DODAJ / KOPIUJ w Dockerfile, aby zmienić właściciela w samym kroku DODAJ / KOPIUJ, zamiast osobnej operacji RUN z chown, która zwiększa rozmiar obrazu, jak już zauważyłeś. Byłoby dobrze, gdyby był to tryb domyślny, tzn. Uprawnienia użytkownika kopiującego pliki są stosowane do kopiowanych plików. Jednak zespół Docker nie chciał złamać kompatybilności wstecznej i dlatego wprowadził nową flagę.Inne alternatywy to:
źródło