En un Dockerfile, ¿cómo actualizar la variable de entorno PATH?

Resuelto ILikeTacos asked hace 10 años • 4 respuestas

Tengo un archivo acoplable que descarga y compila GTK desde el código fuente, pero la siguiente línea no actualiza la variable de entorno de mi imagen:

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

Leí que debería usar ENV para establecer valores ambientales, pero la siguiente instrucción tampoco parece funcionar:

ENV PATH /opt/gtk/bin:$PATH

Este es mi Dockerfile completo:

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
ILikeTacos avatar Nov 24 '14 02:11 ILikeTacos
Aceptado

Puede utilizar Reemplazo de entorno de Dockerfilela siguiente manera:

ENV PATH="${PATH}:/opt/gtk/bin"
Homme Zwaagstra avatar Aug 03 '2016 11:08 Homme Zwaagstra

Aunque la respuesta que Gunter publicó fue correcta, no es diferente de lo que ya había publicado. El problema no fue la ENVdirectiva, sino la instrucción posteriorRUN export $PATH

No es necesario exportar las variables de entorno una vez que las haya declarado ENVen su Dockerfile.

Tan pronto como RUN export ...se eliminaron las líneas, mi imagen se creó con éxito.

ILikeTacos avatar Nov 24 '2014 01:11 ILikeTacos

[ Mencioné esto en respuesta a la respuesta seleccionada, pero se sugirió hacerlo más destacado como una respuesta propia ]

se debe notar que

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

puede que no sea el mismo que

ENV PATH="/opt/gtk/bin:$PATH" 

El primero, con llaves, podría proporcionarle la RUTA del host . La documentación no sugiere que este sea el caso, pero he observado que así es. Esto es fácil de comprobar, simplemente hazlo RUN echo $PATHy compáralo conRUN echo ${PATH}

dankirkd avatar Dec 03 '2020 03:12 dankirkd

Esto no se recomienda (si desea crear/distribuir una imagen de Docker limpia), ya que la PATHvariable se establece mediante /etc/profileun script, el valor se puede anular.

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

Al final del Dockerfile, puedes agregar:

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

Entonces PATH está configurado para todos los usuarios.

Thomas Decaux avatar Oct 16 '2018 18:10 Thomas Decaux