python - 如何使用scl enable在dockerfile中运行python3应用

标签 python python-3.x docker dockerfile

我试图使用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/

相关文章:

python - 如何解决 MoviePy 使用大量内存的问题?

python - 如何以小时、分钟和秒显示 "X"轴刻度?

json - pandas json_normalize 展平嵌套字典

python - 使用 python 和 bs4 抓取后的不同数据

java - 如何更改docker镜像或容器中的java版本?

docker - Kubectl无法在Windows 10上连接

Python 3、以太坊——如何发送 ERC20 代币?

python - 查找 CSS 元素以更改 ipython (jupyter) 笔记本的主题

unicode - python 源代码中允许使用某些 utf8 字符,有些则不允许

docker - Flink 1.5.4 没有在 Kubernetes 中注册 Google Cloud Storage (GCS) 文件系统,尽管它可以在 docker 容器中运行