2014-11-23 20 views
87

Ho un dockerfile che scaricare e costruisce GTK dalla fonte, ma la seguente riga non aggiorna variabile d'ambiente della mia immagine:In un file Docker, come aggiornare la variabile di ambiente PATH?

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

ho letto che che dovrei usare ENV per impostare valori di ambiente, ma il seguente istruzione non sembra funzionare sia:

ENV PATH /opt/gtk/bin:$PATH

Questa è tutta la mia 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 
+1

Il LD_LIBRARY_PATH e PATH devono essere impostati utilizzando ENV non esportare. Inoltre, LD_LIBRARY_PATH non dovrebbe puntare a PATH !. L'eliminazione dei file nel Dockerfile non riduce l'immagine, controlla http://www.centurylinklabs.com/optimizing-docker-images/?hvid=4wO7Yt. –

+0

l'attuale file di docker è valido? –

+0

@HuiWang non può. È stato scritto, è stato scritto 1,5 anni fa e molto è cambiato da allora. Assicurati di includere le modifiche descritte nella risposta selezionata. – ILikeTacos

risposta

28

Sebbene la risposta che Gunter ha pubblicato sia corretta, non è diversa da quella che avevo già pubblicato. Il problema non era la direttiva ENV, ma la successiva istruzione RUN export $PATH

Non c'è bisogno di esportare le variabili di ambiente, una volta che li hanno dichiarati tramite ENV nel vostro Dockerfile.

Non appena i RUN export ... linee sono state rimosse, la mia immagine è stata costruita con successo

134

È possibile utilizzare Environment Replacement nel vostro Dockerfile come segue:

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

È necessario '=' segno uguale? –

+6

@IgorGanapolsky Non in questo caso in quanto sta specificando una singola variabile. Tuttavia, non fa male ed è obbligatorio quando si specificano più variabili. Vedere la [documentazione ENV] (https://docs.docker.com/engine/reference/builder/#env) per maggiori dettagli. –

+2

Questo funziona! Si prega di fare attenzione a '=' deve essere senza spazi. Se aggiungi spazi accanto a '=' come questo 'ENV PATH ="/opt/gtk/bin: $ {PATH} "' CRASH YOUR $ PATH –

Problemi correlati