web-dev-qa-db-fra.com

Dans un fichier Docker, comment mettre à jour la variable d’environnement PATH?

J'ai un fichier docker qui télécharge et construit GTK à partir des sources, mais la ligne suivante ne met pas à jour la variable d'environnement de mon image:

RUN PATH="/opt/gtk/bin:$PATH"
RUN export PATH

J'ai lu que je devrais utiliser ENV pour définir les valeurs de l'environnement, mais l'instruction suivante ne semble pas fonctionner non plus:

ENV PATH /opt/gtk/bin:$PATH

Ceci est mon Dockerfile entier:

FROM ubuntu
RUN apt-get update
RUN apt-get install -y golang gcc make wget git libxml2-utils libwebkit2gtk-3.0-dev libcairo2 libcairo2-dev libcairo-gobject2 shared-mime-info libgdk-pixbuf2.0-* libglib2-* libatk1.0-* libpango1.0-* xserver-xorg xvfb

# Downloading GTKcd
RUN wget http://ftp.gnome.org/pub/gnome/sources/gtk+/3.12/gtk+-3.12.2.tar.xz
RUN tar xf gtk+-3.12.2.tar.xz
RUN cd gtk+-3.12.2

# Setting environment variables before running configure
RUN CPPFLAGS="-I/opt/gtk/include"
RUN LDFLAGS="-L/opt/gtk/lib"
RUN PKG_CONFIG_PATH="/opt/gtk/lib/pkgconfig"
RUN export CPPFLAGS LDFLAGS PKG_CONFIG_PATH
RUN ./configure --prefix=/opt/gtk
RUN make
RUN make install

# running ldconfig after make install so that the newly installed libraries are found.
RUN ldconfig

# Setting the LD_LIBRARY_PATH environment variable so the systems dynamic linker can find the newly installed libraries.
RUN LD_LIBRARY_PATH="/opt/gtk/lib"

# Updating PATH environment program so that utility binaries installed by the various libraries will be found.
RUN PATH="/opt/gtk/bin:$PATH"
RUN export LD_LIBRARY_PATH PATH

# Collecting garbage
RUN rm -rf gtk+-3.12.2.tar.xz

# creating go code root
RUN mkdir gocode
RUN mkdir gocode/src
RUN mkdir gocode/bin
RUN mkdir gocode/pkg

# Setting the GOROOT and GOPATH enviornment variables, any commands created are automatically added to PATH
RUN GOROOT=/usr/lib/go
RUN GOPATH=/root/gocode
RUN PATH=$GOPATH/bin:$PATH
RUN export GOROOT GOPATH PATH
262
ILikeTacos

Vous pouvez utiliser Environment Replacement dans votre Dockerfile comme suit:

ENV PATH="/opt/gtk/bin:${PATH}"
428
Homme Zwaagstra

Bien que la réponse affichée par Gunter soit correcte, elle n'est pas différente de celle que j'avais déjà publiée. Le problème n'était pas la directive ENV, mais l'instruction suivante RUN export $PATH

Il n'est pas nécessaire d'exporter les variables d'environnement, une fois que vous les avez déclarées via ENV dans votre fichier Docker.

Dès que les lignes RUN export ... ont été supprimées, mon image a été construite avec succès.

41
ILikeTacos

Ceci est déconseillé (si vous voulez créer/distribuer une image Docker vierge), car la variable PATH est définie par le script /etc/profile, la valeur peut être remplacée.

head /etc/profile:

if [ "`id -u`" -eq 0 ]; then
  PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
else
  PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
fi
export PATH

A la fin du fichier Dockerfile, vous pouvez ajouter:

RUN echo "export PATH=$PATH" > /etc/environment

Donc, PATH est défini pour tous les utilisateurs.

2
Thomas Decaux