imagenes - docker tag example
En un Dockerfile, ¿Cómo actualizar la variable de entorno PATH? (3)
Aunque la respuesta que Gunter publicó fue correcta, no es diferente de lo que ya había publicado.
El problema no era la directiva
ENV
, sino la instrucción posterior
RUN export $PATH
No es necesario exportar las variables de entorno, una vez que las haya declarado a través de
ENV
en su Dockerfile.
Tan pronto como se eliminó la
RUN export ...
se eliminaron las líneas, mi imagen se construyó con éxito
Tengo un dockerfile que descarga y construye GTK desde el origen, 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 de entorno, pero las siguientes instrucciones tampoco parecen funcionar:
ENV PATH /opt/gtk/bin:$PATH
Este es todo mi Dockerfile:
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
Esto se desaconseja (si desea crear / distribuir una imagen Docker limpia), ya que la variable
PATH
está establecida por
/etc/profile
script, el valor puede ser anulado.
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, puede agregar:
RUN echo "export PATH=$PATH" > /etc/environment
Entonces PATH está configurado para todos los usuarios.
Puede usar el
reemplazo de entorno
en su
Dockerfile
siguiente manera:
ENV PATH="/opt/gtk/bin:${PATH}"