我试图使用CentOS 7作为基本镜像在Docker容器中运行python3应用程序。因此,如果我只是以交互方式进行游戏,则输入scl enable rh-python36 bash
显然,这将我的标准python2环境切换到了我之前安装(在Dockerfile中)安装的python3.6环境中。SHELL ["scl", "enable", "rh-python36"]
(及其许多变体)
这使我能够在此python3环境中进行所有的pip安装。但是,当我实际上要使用CMD运行我的app.py时,它默认为python2。我尝试过ENTRYPOINT和CMD的变体,但是当容器最终运行时,我似乎无法使python3环境处于 Activity 状态。如何使用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 中
最佳答案
SHELL
完全是为此错误的Dockerfile
命令。您可能需要将其放在RUN
节中。SHELL
的目的是定义用于执行RUN
命令的 shell 。所以像
SHELL ["sh", "-c"] # The default
RUN echo "foo"
最终运行
sh -c 'echo "foo"'
当然,用不支持此用例的命令替换
SHELL
只会为您破坏RUN
命令。也许尝试像
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
COPY . .
WORKDIR /usr/src/app/codeBase
RUN scl enable rh-python36 pip install --no-cache-dir -r ./requirements.txt
EXPOSE 9000
CMD ["scl", "enable", "rh-python36", "python", "run.py"]
关于python - 如何使用scl enable在dockerfile中运行python3应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56434820/