如何在dockerfile中使用bash配置文件

时间:2018-09-25 08:43:15

标签: docker dockerfile

我正在尝试使用dockerfile构建映像。 dockerfile中的命令如下所示:

FROM ubuntu:16.04
:
:
RUN pip3 install virtualenvwrapper  
RUN echo '# Python virtual environment wrapper' >> ~/.bashrc
RUN echo 'export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3' >> ~/.bashrc
RUN echo 'export WORKON_HOME=$HOME/.virtualenvs' >> ~/.bashrc
RUN echo 'source /usr/local/bin/virtualenvwrapper.sh' >> ~/.bashrc

这些命令之后,我将使用virtualenvwrapper命令创建一些virtualenvs。

如果在~/.bashrc中只需要处理环境变量,则可以使用ARGENV进行设置。

  

但是现在我还有其他virtualenvwrapper.sh这样的shell脚本文件,它们将设置自己的一些变量。

此外,RUN source ~/.bashrc不起作用(找不到源)。

我该怎么办?

2 个答案:

答案 0 :(得分:1)

您不应尝试在Dockerfile中编辑诸如.bash_profile之类的外壳点文件。有许多不通过外壳的常见路径(例如CMD ["python", "myapp.py"]不会启动任何类型的外壳,也不会读取.bash_profile)。如果需要在映像中全局设置环境变量,请使用Dockerfile ENV指令。

对于Python应用程序,您应该只使用pip install将应用程序安装到映像的“全局” Python中。 You don't specifically need a virtual environment; Docker提供了许多相同的隔离功能(Dockerfile中的pip install不会影响主机系统的全局安装软件包)。

一个典型的Python应用程序Dockerfile(从https://hub.docker.com/_/python/复制)看起来像

FROM python:3
WORKDIR /usr/src/app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "./your-daemon-or-script.py"]

关于您的最后一个问题,source是仅某些Shell提供的供应商扩展。 POSIX standard不需要它,而Debian和Ubuntu中的默认/bin/sh不提供它。无论如何,由于环境变量会在每个RUN命令上重置,因此如果RUN source ...行中没有其他事件发生,则RUN . ...(或更便于携带的RUN)将是无操作的。

答案 1 :(得分:0)

  1. 避免使用〜=>将您的bashrc放置在特定路径中
  2. 使用;
  3. 将源bashrc和您的命令放在同一RUN行上

RUN线路在环境方面是完全相互独立的