2014-11-23 11 views
87

Mam dockerfile że pobrać i buduje GTK od źródła, ale następujący wiersz nie aktualizuje mój obraz jest zmienną środowiskową:W pliku Dockerfile, jak zaktualizować zmienną środowiskową PATH?

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

czytałem, że powinienem używać ENV ustawić wartości dla środowiska, ale następujący instrukcja nie wydają się działać albo:

ENV PATH /opt/gtk/bin:$PATH

to jest mój cały 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

LD_LIBRARY_PATH i ścieżka powinna być ustawiona przy użyciu ENV nie eksportować. Jesteś także LD_LIBRARY_PATH nie powinien wskazywać na PATH !. Usuwanie plików w pliku Dockerfile nie powoduje zmniejszenia obrazu, sprawdź http://www.centurylinklabs.com/optimizing-docker-images/?hvid=4wO7Yt. –

+0

to aktualny plik dokowany jest prawidłowy? –

+0

@HuiWang to może nie być. Został napisany, został napisany 1,5 roku temu i od tego czasu wiele się zmieniło. Tylko upewnij się, że wprowadziłeś zmiany opisane w wybranej odpowiedzi. – ILikeTacos

Odpowiedz

28

Chociaż odpowiedź, którą opublikował Gunter, była poprawna, nie różni się od tego, co już napisałem. Problem nie dotyczył dyrektywy ENV, ale kolejna instrukcja nie wymaga eksportowania zmiennych środowiskowych po zadeklarowaniu ich za pomocą ENV w pliku Dockerfile.

Jak tylko RUN export ... linie zostały usunięte, mój obraz został pomyślnie

134

Można użyć Environment Replacement zbudowany w Dockerfile następująco:

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

Czy znak "=" jest konieczny? –

+6

@IgorGanapolsky Nie w tym przypadku, ponieważ określa pojedynczą zmienną. Jednak nie boli i jest obowiązkowe przy określaniu wielu zmiennych. Więcej informacji można znaleźć w [dokumentacji ENV] (https://docs.docker.com/engine/reference/builder/#env). –

+2

To działa! Proszę zadbać o '=' musi być bez spacji. Jeśli dodasz spacje obok '=' w ten sposób 'ENV PATH ="/opt/gtk/bin: $ {PATH} "' WILL CRASH YOUR $ PATH –

Powiązane problemy