【发布时间】:2019-06-03 21:36:09
【问题描述】:
我试图在使用 CentOS 7 作为基础映像的 docker 容器中运行 python3 应用程序。所以如果我只是以交互方式玩它,我输入scl enable rh-python36 bash
这显然将我的标准 python2 环境切换到我之前安装的 python3.6 环境(在 Dockerfile 中)现在,在 dockerfile 中我运行以下命令:
SHELL ["scl", "enable", "rh-python36"](以及这个的许多变体)
这使我能够在这个 python3 环境中完成我所有的 pip 安装。但是,当我真的想用 CMD 运行我的 app.py 时,它默认为 python2。我尝试过使用 ENTRYPOINT 和 CMD 的变体,但是当容器最终运行时,我似乎无法激活 python3 环境。如何使用 python3 使其正确运行?
这是 dockerfile:
FROM centos:7
RUN mkdir -p /usr/src/app && \
yum install -y centos-release-scl && \
yum install -y rh-python36 && \
yum install -y rh-python36-python-tkinter
SHELL ["scl", "enable", "rh-python36"]
WORKDIR /usr/src/app
COPY . .
WORKDIR /usr/src/app/codeBase
RUN pip install --no-cache-dir -r /usr/src/app/codeBase/requirements.txt
EXPOSE 9000
CMD ["python", "run.py"]
我也尝试过别名解决方案,但恐怕它不会改变 CMD 的 python exe:这是完全可运行的版本,它仍然打印出 python 2.7.5:
FROM centos:7
RUN mkdir -p /usr/src/app && \
yum install -y centos-release-scl && \
yum install -y rh-python36 && \
yum install -y rh-python36-python-tkinter
WORKDIR /usr/src/app
RUN alias python=$(find / -type f -name "python*" | grep "python3.6$")
CMD ["python", "-V"]
在使用 CMD 创建的新 shell 中似乎这些都不存在
【问题讨论】:
-
将
alias放入您的Dockerfile是完全错误的。无论如何,您可能应该完全避免使用别名;但是在 Dockerfile 中定义别名的方法是在 Docker 镜像中将别名定义添加到 shell 的初始化文件中。 -
@tripleee 是的,我真的不喜欢别名作为解决方案。我想会有一个对码头工人更友好的解决方案。我刚刚在下面发布了一个适合我的答案。不过,我没有看到任何不那么复杂的方法来实现这一点。
标签: python python-3.x docker dockerfile