我尝试构建一个docker镜像,发现我设置的PATH变量有一些问题。一个最小的非工作示例是:
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似乎没有正确扩展。以下两个指令也不起作用:
ENV PATH=~/tools/ctags/bin:$PATH
ENV PATH="~/tools/ctags/bin:$PATH"只有设置绝对路径才有效:
# the following setting works.
ENV PATH="/root/tools/ctags/bin:$PATH"我已经查找了码头的参考资料,但找不到有关这方面的文件。
发布于 2019-09-28 22:12:41
通常,在构建Docker镜像时,将其安装到普通的“系统”目录中是可以的。无论您正在构建什么,它都将被隔离在映像中,并且它不能与其他工具冲突。
对于您直接提出的问题,最简单的答案是安排事情,这样您就不需要设置$PATH了。
在您给出的示例中,您可以安全地使用Autoconf的默认安装目录/usr/local。当你开始构建你的镜像时,它几乎肯定是空的,只有你安装的东西会在那里。
RUN ... \
&& ./configure \
&& make \
&& make install( Python的推论是不为您的应用程序创建虚拟环境;只需使用系统pip将其安装到默认的Python库目录中。)
不要期望有一个主目录。如果您必须在某些非默认位置安装,那么/app很常见,而且/opt/whatever与非Docker Linux实践是一致的。避免使用$HOME或~,它们通常在Docker中没有很好地定义(除非你特意让它们定义好)。
https://stackoverflow.com/questions/58146047
复制相似问题