ソースからGTKをダウンロードしてビルドするdockerfileがありますが、次の行はイメージの環境変数を更新していません。
RUN PATH="/opt/gtk/bin:$PATH"
RUN export PATH
私は環境値を設定するためにENVを使用すべきであると読んだが、次の命令もまたうまくいかないようだ:
ENV PATH /opt/gtk/bin:$PATH
これは私の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
次のように、 環境の置き換え をDockerfile
に使用できます。
ENV PATH="/opt/gtk/bin:${PATH}"
Gunterが投稿した答えは正しかったが、それは私がすでに投稿したものと変わらない。問題はENV
ディレクティブではなく、後続の命令RUN export $PATH
でした。
DockerfileのENV
を使って宣言すれば、環境変数をエクスポートする必要はありません。
RUN export ...
行が削除されるとすぐに、私のイメージは正常に構築されました
PATH
変数は/etc/profile
スクリプトによって設定されるため、これはお勧めできません(クリーンなDockerイメージを作成または配布したい場合)。値をオーバーライドすることができます。
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
Dockerfileの最後に、次のものを追加できます。
RUN echo "export PATH=$PATH" > /etc/environment
そのため、PATHはすべてのユーザーに対して設定されています。