在 Dockerfile 中,如何更新 PATH 环境变量?

新手上路,请多包涵

我有一个从源代码下载和构建 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

原文由 ILikeTacos 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.5k
2 个回答

您可以在 Dockerfile 中使用 环境替换,如下所示:

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

原文由 Homme Zwaagstra 发布,翻译遵循 CC BY-SA 4.0 许可协议

尽管 Gunter 发布的答案是正确的,但它与我已经发布的并没有什么不同。问题不是 ENV 指令,而是后续指令 RUN export $PATH

无需导出环境变量,通过 ENV 在 Dockerfile 中声明它们。

删除 RUN export ... 行后,我的图像就成功构建了

原文由 ILikeTacos 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进