如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
此容器镜像包含Python 3.8,作为您Python 3.8应用程序的https://github.com/openshift/source-to-image%EF%BC%88%E6%BA%90%E5%88%B0%E9%95%9C%E5%83%8F%EF%BC%89%E5%9F%BA%E7%A1%80%E9%95%9C%E5%83%8F%E3%80%82%E7%94%A8%E6%88%B7%E5%8F%AF%E9%80%89%E6%8B%A9%E5%9F%BA%E4%BA%8ERHEL%E6%88%96CentOS%E7%9A%84%E6%9E%84%E5%BB%BA%E5%99%A8%E9%95%9C%E5%83%8F%E3%80%82RHEL%E9%95%9C%E5%83%8F%E5%8F%AF%E5%9C%A8Red Hat容器目录获取,CentOS镜像可在Quay.io获取,Fedora镜像可在Fedora Registry获取。生成的镜像可使用https://github.com/containers/libpod%E6%88%96http://docker.io%E8%BF%90%E8%A1%8C%E3%80%82
注意:虽然本README中的示例使用podman,但您可以将任何此类调用替换为docker,参数保持不变。
作为容器提供的Python 3.8是一个基础平台,用于构建和运行各种Python 3.8应用程序和框架。Python是一种易于学习、功能强大的编程语言,它具有高效的高级数据结构和简单而有效的面向对象编程方法。Python优雅的语法、动态类型以及解释型特性,使其成为在大多数平台的许多领域中进行脚本编写和快速应用开发的理想语言。
此容器镜像包含npm工具(参见https://github.com/sclorg/s2i-base-container/tree/master/base%EF%BC%89%EF%BC%8C%E5%9B%A0%E6%AD%A4%E7%94%A8%E6%88%B7%E5%8F%AF%E4%BD%BF%E7%94%A8%E5%AE%83%E4%B8%BAWeb%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E5%AE%89%E8%A3%85JavaScript%E6%A8%A1%E5%9D%97%E3%80%82%E4%B8%8D%E4%BF%9D%E8%AF%81%E9%95%9C%E5%83%8F%E4%B8%AD%E5%8C%85%E5%90%AB%E7%89%B9%E5%AE%9A%E7%89%88%E6%9C%AC%E7%9A%84npm%E6%88%96nodejs%EF%BC%9B%E8%BF%99%E4%BA%9B%E7%89%88%E6%9C%AC%E5%8F%AF%E8%83%BD%E9%9A%8F%E6%97%B6%E6%9B%B4%E6%94%B9%EF%BC%8C%E5%8C%85%E5%90%ABnodejs%E4%BB%85%E4%B8%BA%E4%BD%BFnpm%E6%AD%A3%E5%B8%B8%E5%B7%A5%E4%BD%9C%E3%80%82
以下假设您使用受支持的镜像,可通过OpenShift中的python:3.8镜像流标签获取。在OpenShift中构建简单的https://github.com/sclorg/django-ex.git%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E5%8F%AF%E9%80%9A%E8%BF%87%E4%BB%A5%E4%B8%8B%E6%AD%A5%E9%AA%A4%E5%AE%9E%E7%8E%B0%EF%BC%9A
oc new-app python:3.8~https://github.com/sclorg/django-ex.git
访问应用程序:
$ oc get pods $ oc exec <pod> -- curl 127.0.0.1:8080
此镜像支持OpenShift中的源到镜像(S2I)策略。源到镜像是一个OpenShift框架,可轻松编写接收应用程序源代码作为输入、使用构建器镜像(如本Python容器镜像)并生成运行组装应用程序的新镜像的镜像。
为支持源到镜像框架,构建器镜像中包含重要脚本:
/usr/libexec/s2i/assemble脚本用于生成包含应用程序 artifacts 的新镜像。该脚本接收给定应用程序的源代码,并将其放置到镜像内的适当目录中。它利用Python应用程序开发中的一些常见模式(见下文环境变量部分)。/usr/libexec/s2i/run脚本被设置为生成的容器镜像(包含应用程序 artifacts 的新镜像)中的默认命令。它根据APP_MODULE、APP_FILE或APP_SCRIPT环境变量的设置运行应用程序,或尝试自动检测最佳运行方式。与源到镜像策略相比,使用Dockerfile是构建包含应用程序的Python容器镜像的更灵活方式。当源到镜像不够灵活或在OpenShift环境外构建镜像时,使用Dockerfile。
要在Dockerfile中使用Python镜像,请按照以下步骤操作:
podman pull registry.access.redhat.com/ubi8/python-38
此处使用可从https://github.com/sclorg/django-ex.git%E8%8E%B7%E5%8F%96%E7%9A%84%E7%A4%BA%E4%BE%8B%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E3%80%82%E6%82%A8%E5%8F%AF%E4%BB%A5%E5%85%8B%E9%9A%86%E8%AF%A5%E4%BB%93%E5%BA%93%E8%BF%9B%E8%A1%8C%E8%BF%9B%E4%B8%80%E6%AD%A5%E5%AE%9E%E9%AA%8C%E3%80%82%E6%82%A8%E4%B9%9F%E5%8F%AF%E4%BB%A5%E6%9F%A5%E7%9C%8Bs2i-python-container%E4%BB%93%E5%BA%93%E4%B8%AD%E7%9A%84%E4%BB%A3%E7%A0%81%E7%A4%BA%E4%BE%8B%EF%BC%9Ahttps://github.com/sclorg/s2i-python-container/tree/master/examples
git clone https://github.com/sclorg/django-ex.git app-src
此步骤通常至少包括以下部分:
对于这三个部分,用户可以手动设置并在Dockerfile中显式使用python和pip命令,或使用镜像内的源到镜像脚本。
手动方式灵活性最高,但要求您知道如何手动处理模块或软件集合、如何使用正确版本的Python设置虚拟环境等。另一方面,使用源到镜像脚本可使您的Dockerfile为将来无缝切换到更新或不同平台做好准备。
要使用源到镜像脚本并通过Dockerfile构建镜像,请创建包含以下内容的Dockerfile:
FROM registry.access.redhat.com/ubi8/python-38 # 将应用程序源代码添加到assemble脚本期望的目录,并设置权限使容器无需root权限运行 USER 0 ADD app-src /tmp/src RUN chown -R 1001:0 /tmp/src USER 1001 # 安装依赖项 RUN /usr/libexec/s2i/assemble # 设置生成镜像的默认命令 CMD /usr/libexec/s2i/run
podman build -t python-app .
podman run -d python-app
要设置这些环境变量,您可以将它们作为键值对放入源代码仓库中的.s2i/environment文件。
APP_SCRIPT
用于从脚本文件运行应用程序。应为脚本文件的路径(默认值为app.sh,除非设置为null),运行此脚本以启动应用程序。
APP_FILE
用于从Python脚本运行应用程序。应为Python文件的路径(默认值为app.py,除非设置为null),将此文件传递给Python解释器以启动应用程序。
APP_MODULE
用于使用Gunicorn运行应用程序,如此处所述。此变量使用MODULE_NAME:VARIABLE_NAME模式指定WSGI可调用对象,其中MODULE_NAME是模块的完整点分路径,VARIABLE_NAME指指定模块内的WSGI可调用对象。如果未指定,Gunicorn将查找名为application的WSGI可调用对象。
如果未提供APP_MODULE,run脚本将在项目中查找wsgi.py文件,如果存在则使用它。
如果使用setup.py安装应用程序,MODULE_NAME部分可从中读取。例如,参见https://github.com/sclorg/s2i-python-container/tree/master/3.8/test/setup-test-app%E3%80%82
APP_HOME
此变量可用于指定包含要运行应用程序的子目录。此变量指向的目录需要包含wsgi.py(用于Gunicorn)或manage.py(用于Django)。
如果未提供APP_HOME,assemble和run脚本将使用应用程序的根目录。
APP_CONFIG
有效的Python文件路径,包含Gunicorn配置。
DISABLE_MIGRATE
将此变量设置为非空值可禁止在运行生成的镜像时执行manage.py migrate。这仅影响Django项目。有关在OpenShift环境中如何/何时运行数据库迁移的建议,请参见OpenShift博客上Django文章的“处理数据库迁移”部分([***]
DISABLE_COLLECTSTATIC
将此变量设置为非空值可禁止在构建期间执行manage.py collectstatic。这仅影响Django项目。
DISABLE_SETUP_PY_PROCESSING
将此设置为非空值可跳过setup.py脚本的处理,如果您在requirements.txt中使用-e .触发其处理,或不希望将应用程序安装到site-packages目录中。
ENABLE_PIPENV
设置此变量以使用https://github.com/pypa/pipenv%EF%BC%88%E9%AB%98%E7%BA%A7Python%E6%89%93%E5%8C%85%E5%B7%A5%E5%85%B7%EF%BC%89%E7%AE%A1%E7%90%86%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E7%9A%84%E4%BE%9D%E8%B5%96%E9%A1%B9%E3%80%82%E4%BB%85%E5%BD%93%E9%A1%B9%E7%9B%AE%E5%8C%85%E5%90%AB%E6%A0%BC%E5%BC%8F%E6%AD%A3%E7%A1%AE%E7%9A%84Pipfile%E5%92%8CPipfile.lock%E6%97%B6%E4%BD%BF%E7%94%A8%E3%80%82
PIN_PIPENV_VERSION
与ENABLE_PIPENV一起设置此变量以使用特定版本的Pipenv。如果未设置,将安装PyPI上的最新稳定版本。例如PIN_PIPENV_VERSION=2018.11.26将安装pipenv==2018.11.26。
ENABLE_MICROPIPENV
设置此变量以使用https://github.com/thoth-station/micropipenv%EF%BC%88pip%E7%9A%84%E8%BD%BB%E9%87%8F%E7%BA%A7%E5%8C%85%E8%A3%85%E5%99%A8%EF%BC%8C%E6%94%AF%E6%8C%81requirements.txt%E3%80%81Pipenv%E5%92%8CPoetry%E9%94%81%E5%AE%9A%E6%96%87%E4%BB%B6%EF%BC%8C%E6%88%96%E8%BD%AC%E6%8D%A2%E4%B8%BApip-tools%E5%85%BC%E5%AE%B9%E8%BE%93%E5%87%BA%EF%BC%89%E3%80%82%E4%B8%93%E4%B8%BA%E5%AE%B9%E5%99%A8%E5%8C%96Python%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1%E3%80%82%E4%BB%85%E9%80%82%E7%94%A8%E4%BA%8EPython 3镜像。
ENABLE_INIT_WRAPPER
将此变量设置为非空值以使用init包装器。这对于无法回收僵尸进程的服务器(如Django开发服务器或Tornado)很有用。此选项可与APP_SCRIPT或APP_FILE一起使用。对于通过APP_MODULE使用的Gunicorn,由于Gunicorn可正确回收僵尸进程,因此从不应用此选项。
PIP_INDEX_URL
设置此变量以使用自定义索引URL或镜像下载构建过程中所需的包。这会影响requirements.txt中列出的包。它还会影响pipenv和micropipenv的安装以及容器中pip的更新,但如果在自定义索引中未找到,容器将尝试从上游PyPI安装/更新它们。
UPGRADE_PIP_TO_LATEST
将此变量设置为非空值可在安装任何Python包之前将pip程序及相关Python包(setuptools和wheel)升级到最新版本。如果未设置,将使用平台为所使用的Python版本包含的默认版本。
WEB_CONCURRENCY
设置此变量以更改工作进程数的默认设置。默认情况下,此值设置为可用核心数乘以2,上限为12。
您无需更改现有Python项目仓库中的任何内容。但是,如果存在以下文件,它们将影响构建过程的行为:
requirements.txt
要使用pip安装的依赖项列表。格式文档见此处。
Pipfile
requirements.txt的替代品,项目目前处于积极设计和开发中,文档见https://github.com/pypa/pipfile%E3%80%82%E8%AE%BE%E7%BD%AE%60ENABLE_PIPENV%60%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F%E4%B8%BAtrue%E4%BB%A5%E5%A4%84%E7%90%86%E6%AD%A4%E6%96%87%E4%BB%B6%E3%80%82
setup.py
配置项目的各个方面,包括依赖项的安装,文档见此处。对于大多数项目,只需使用requirements.txt或Pipfile即可。设置DISABLE_SETUP_PY_PROCESSING环境变量为true以跳过此文件的处理。
s2i-python生成的容器镜像按以下优先级顺序执行项目:
Gunicorn
如果安装了Gunicorn WSGI HTTP服务器,则使用它来提供应用程序。可通过在requirements.txt中列出或在setup.py的install_requires部分包含来安装。
如果仓库中存在名为wsgi.py的文件,它将用作应用程序的入口点。可通过环境变量APP_MODULE覆盖此设置。Django项目默认包含此文件。
如果requirements中同时包含Django和Gunicorn,您的Django项目将自动使用Gunicorn提供服务。
Django开发服务器
如果requirements中包含Django但未包含Gunicorn,则使用Django的开发Web服务器提供应用程序。但不建议在生产环境中使用。
Python脚本
当通过APP_FILE环境变量指定Python脚本路径时使用(如果存在app.py文件,则默认使用)。脚本将传递给常规Python解释器以启动应用程序。
应用程序脚本文件
最通用的应用程序执行方式。当通过APP_SCRIPT环境变量指定可执行脚本文件路径时使用(如果存在app.sh文件,则默认使用)。直接执行脚本以启动应用程序。
如果使用Django,热部署将开箱即用。
要在使用Gunicorn时启用热部署,请确保仓库中包含Gunicorn配置文件,并将reload选项设置为true。确保通过APP_CONFIG环境变量指定您的配置。
要在运行中的容器中更改源代码,使用podman(或docker)的https://github.com/containers/libpod/blob/master/docs/podman-exec.1.md%E5%91%BD%E4%BB%A4%EF%BC%9A
podman exec -it <CONTAINER_ID> /bin/bash
进入运行中的容器后,当前目录设置为/opt/app-root/src,即源代码所在位置。
Dockerfile和其他源代码可在https://github.com/sclorg/s2i-python-container%E8%8E%B7%E5%8F%96%E3%80%82%E5%9C%A8%E8%AF%A5%E4%BB%93%E5%BA%93%E4%B8%AD%EF%BC%8C%E6%82%A8%E8%BF%98%E5%8F%AF%E4%BB%A5%E6%89%BE%E5%88%B0%E5%85%B6%E4%BB%96%E7%89%88%E6%9C%AC%E7%9A%84Python%E7%8E%AF%E5%A2%83Dockerfile%E3%80%82CentOS%E7%9A%84Dockerfile%E5%90%8D%E4%B8%BA%60Dockerfile%60%EF%BC%8CRHEL7%E7%9A%84%E5%90%8D%E4%B8%BA%60Dockerfile.rhel7%60%EF%BC%8CRHEL8%E7%9A%84%E5%90%8D%E4%B8%BA%60Dockerfile.rhel8%60%EF%BC%8CFedora%E7%9A%84%E5%90%8D%E4%B8%BA%60Dockerfile.fedora%60%E3%80%82
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。


来自真实用户的反馈,见证轩辕镜像的优质服务