首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker ENV指令中写入PATH变量的正确方式是什么?

Docker ENV指令中写入PATH变量的正确方式是什么?
EN

Stack Overflow用户
提问于 2019-09-28 19:53:00
回答 1查看 33关注 0票数 0

我尝试构建一个docker镜像,发现我设置的PATH变量有一些问题。一个最小的非工作示例是:

代码语言:javascript
复制
FROM ubuntu:latest

SHELL ["/bin/bash", "-cu"]
ARG CTAGS_DIR=/root/tools/ctags

 # Install common dev tools
RUN apt-get update --allow-unauthenticated \
  && apt-get install --allow-unauthenticated -y git curl autoconf pkg-config zsh

# Compile ctags
RUN cd /tmp \
  && git clone https://github.com/universal-ctags/ctags.git \
  && cd ctags \
  && ./autogen.sh \
  && ./configure --prefix=${CTAGS_DIR} \
  && make -j$(nproc) \
  && make install \
  && rm -rf /tmp/ctags
ENV PATH=$HOME/tools/ctags/bin:$PATH

RUN echo "PATH is $PATH"
RUN which ctags

在上面的does文件中,行ENV PATH=$HOME/tools/ctags/bin:$PATH没有像预期的那样工作。$HOME似乎没有正确扩展。以下两个指令也不起作用:

代码语言:javascript
复制
ENV PATH=~/tools/ctags/bin:$PATH
ENV PATH="~/tools/ctags/bin:$PATH"

只有设置绝对路径才有效:

代码语言:javascript
复制
# the following setting works.
ENV PATH="/root/tools/ctags/bin:$PATH"

我已经查找了码头的参考资料,但找不到有关这方面的文件。

EN

回答 1

Stack Overflow用户

发布于 2019-09-28 22:12:41

通常,在构建Docker镜像时,将其安装到普通的“系统”目录中是可以的。无论您正在构建什么,它都将被隔离在映像中,并且它不能与其他工具冲突。

对于您直接提出的问题,最简单的答案是安排事情,这样您就不需要设置$PATH了。

在您给出的示例中,您可以安全地使用Autoconf的默认安装目录/usr/local。当你开始构建你的镜像时,它几乎肯定是空的,只有你安装的东西会在那里。

代码语言:javascript
复制
RUN ... \
 && ./configure \
 && make \
 && make install

( Python的推论是不为您的应用程序创建虚拟环境;只需使用系统pip将其安装到默认的Python库目录中。)

不要期望有一个主目录。如果您必须在某些非默认位置安装,那么/app很常见,而且/opt/whatever与非Docker Linux实践是一致的。避免使用$HOME~,它们通常在Docker中没有很好地定义(除非你特意让它们定义好)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58146047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档