Dockerfile: $ HOME ne fonctionne pas avec les instructions ADD / COPY
Avant le dépôt d'un bug, je voudrais demander à quelqu'un pour confirmer l'étrange docker build
comportement, j'ai récemment fait l'objet d'.
Considérons que nous avons un simple Dockerfile où nous essayons de copier certains fichiers dans le répertoire home de l'utilisateur non-root:
FROM ubuntu:utopic
ENV DEBIAN_FRONTEND=noninteractive
RUN sed -i.bak 's/http:\/\/archive.ubuntu.com\/ubuntu\//mirror:\/\/mirrors.ubuntu.com\/mirrors.txt\//g' /etc/apt/sources.list
RUN echo "deb http://repo.aptly.info/squeeze main" >> /etc/apt/sources.list.d/_aptly.list
RUN apt-key adv --keyserver keys.gnupg.net --recv-keys e083a3782a194991
RUN apt-get update
RUN apt-get install -y aptly
RUN useradd -m aptly
RUN echo aptly:aptly | chpasswd
USER aptly
COPY ./.aptly.conf $HOME/.aptly.conf
COPY ./public.key $HOME/public.key
COPY ./signing.key $HOME/signing.key
RUN gpg --import $HOME/public.key $HOME/signing.key
RUN aptly repo create -comment='MAILPAAS components' -distribution=utopic -component=main mailpaas
CMD ["/usr/bin/aptly", "api", "serve"]
C'est ce que j'obtiens quand j'essaie de construire cette image:
...
Step 10 : USER aptly
---> Running in 8639f826420b
---> 3242919b2976
Removing intermediate container 8639f826420b
Step 11 : COPY ./.aptly.conf $HOME/.aptly.conf
---> bbda6e5b92df
Removing intermediate container 1313b12ca6c6
Step 12 : COPY ./public.key $HOME/public.key
---> 9a701a78d10d
Removing intermediate container 3a6e40b8593a
Step 13 : COPY ./signing.key $HOME/signing.key
---> 3d4eb847abe8
Removing intermediate container 5ed8cf52b810
Step 14 : RUN gpg --import $HOME/public.key $HOME/signing.key
---> Running in 6e481ec97f74
gpg: directory `/home/aptly/.gnupg' created
gpg: new configuration file `/home/aptly/.gnupg/gpg.conf' created
gpg: WARNING: options in `/home/aptly/.gnupg/gpg.conf' are not yet active during this run
gpg: keyring `/home/aptly/.gnupg/secring.gpg' created
gpg: keyring `/home/aptly/.gnupg/pubring.gpg' created
gpg: can't open `/home/aptly/public.key': No such file or directory
gpg: can't open `/home/aptly/signing.key': No such file or directory
gpg: Total number processed: 0
Semble $HOME
est vide. Mais pourquoi? Mettre le chemin absolu du répertoire home au lieu de $HOME
n'est pas très pratique.
source d'informationauteur Vitaly Isaev | 2015-03-10
Vous devez vous connecter pour publier un commentaire.
Est là votre problème:
Lorsque vous utilisez le
USER
directive, il affecte le nom d'utilisateur utilisé pour démarrer de nouvelles commandes à l'intérieur du conteneur. Ainsi, par exemple, si vous faites cela:Vous obtenez ceci:
Parce que le
RUN
commandes démarre une nouvelle coque à l'intérieur d'un conteneur, qui est modifié par le précédentUSER
directive.Lorsque vous utilisez le
COPY
directive, vous n'êtes pas au début d'un processus à l'intérieur du conteneur, et Docker a aucun moyen de savoir ce que (le cas échéant) les variables d'environnement seraient exposés par un obus.Votre meilleur pari est de définir
ENV HOME /home/aptly
dans votre Dockerfile qui va travailler, ou de en scène vos fichiers dans un emplacement temporaire, puis:Aussi, n'oubliez pas que lorsque vous
COPY
fichiers qu'ils seront détenus parroot
; vous devrez explicitementchown
à l'utilisateur approprié.