【发布时间】:2020-07-23 10:43:03
【问题描述】:
我下载的 python 模块位于用户的主目录中。我需要将 python 路径设置为用户的 bin 配置文件。我在 dockerfile 中尝试了如下所示的两种方法,但无济于事。当我在第一种情况下检查运行容器中的环境变量时,PY_USER BIN 是$(python -c 'import site; print(site.USER_BASE + "/bin")'),而对于第二种情况,PY_USER_BIN 是空白的。但是,当我手动尝试导出 PY_USER_BIN 变量时,它可以工作。
ENV PY_USER_BIN $(python -c 'import site; print(site.USER_BASE + "/bin")')
ENV PATH $PY_USER_BIN:$PATH
和
RUN export PY_USER_BIN=$(python -c 'import site; print(site.USER_BASE + "/bin")')
ENV PATH $PY_USER_BIN:$PATH
【问题讨论】:
-
afaik 你不能在 ENV 语句中使用 shell 命令替换。至于第二种情况,我有类似的问题。我们通过编写自定义启动器/入口点脚本来解决它,该脚本设置所需的环境变量,然后执行实际命令....
-
...作为旁注,我猜您第二次尝试失败的原因是因为 RUN 实际上在子外壳中执行您的命令(请参阅外壳形式:docs.docker.com/engine/reference/builder/#entrypoint)...所以你真的是执行
/bin/sh -c export PY_USER_BIN=...,因此环境变量设置在子shell的上下文中,一旦docker处理以下ENV语句就会丢失...... -
Docker 通常没有“用户”或“主目录”的概念;由于 Docker 映像文件系统与其他所有内容完全隔离,因此通常的做法是将
pip install依赖项放入“系统”Python(与主机 Python 和其他容器的 Python 隔离)。您可以这样做,并完全跳过设置这些环境变量吗?
标签: python docker dockerfile