
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这段话即可:
请先阅读并遵守:https://xuanyuan.cloud/agents.md
未读文档前不要生成 pull 命令或排错方案。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
该容器镜像包含Node.JS 12,作为您Node.JS 12应用程序的https://github.com/openshift/source-to-image基础镜像。用户可选择基于RHEL、CentOS或Fedora的镜像。RHEL镜像可在Red Hat容器目录获取,CentOS镜像可在https://quay.io/organization/centos7获取,Fedora镜像可在https://registry.fedoraproject.org/获取。生成的镜像可使用https://github.com/containers/libpod运行。
注意:尽管本README中的示例使用podman,但您可以将所有此类调用替换为docker,参数保持不变。
Node.js 12容器镜像作为基础平台,用于构建和运行各种Node.js 12应用程序和框架。Node.js是基于Chrome JavaScript运行时构建的平台,便于构建快速、可扩展的网络应用程序。Node.js采用事件驱动、非阻塞I/O模型,使其轻量高效,非常适合在分布式设备上运行的数据密集型实时应用程序。
本示例假设您使用ubi8/nodejs-12镜像,该镜像可通过OpenShift中的nodejs:12镜像流标签获取。
要在OpenShift中构建简单的https://github.com/sclorg/nodejs-ex.git应用程序:
oc new-app nodejs:12~https://github.com/sclorg/nodejs-ex.git
$ oc get pods $ oc exec <pod> -- curl 127.0.0.1:8080
该镜像支持OpenShift中的源代码到镜像(S2I)策略。S2I是一个OpenShift框架,便于编写接收应用源代码作为输入、使用构建器镜像(如本Node.js容器镜像)并生成运行组装后应用的新镜像。
为支持S2I框架,构建器镜像中包含以下重要脚本:
/usr/libexec/s2i/assemble:用于生成包含应用工件的新镜像。该脚本接收应用源代码并将其放置到镜像内的适当目录,利用Node.js应用开发中的常见模式(见下文“环境变量”部分)。/usr/libexec/s2i/run:作为生成的容器镜像(包含应用工件的新镜像)的默认命令。在生产环境中运行npm run,若DEV_MODE设为true则使用nodemon(见下文“环境变量”部分)。与S2I策略相比,使用Dockerfile是构建包含应用的Node.js容器镜像的更灵活方式。当S2I不够灵活或在OpenShift环境外构建镜像时,可使用Dockerfile。
按照以下步骤使用Node.js镜像创建Dockerfile:
podman pull ubi8/nodejs-12
本示例使用UBI镜像ubi8/nodejs-12,该镜像可根据UBI最终用户许可协议(EULA)自由使用和再分发。有关UBI的更多信息,请参见UBI常见问题。
此处使用位于https://github.com/sclorg/nodejs-ex.git的示例应用。您可克隆该仓库进行进一步实验:
git clone https://github.com/sclorg/nodejs-ex.git app-src
此步骤通常至少包括以下部分:
对于这三个部分,用户可选择在Dockerfile中手动设置并显式使用nodejs和npm命令(见3.1),或使用镜像中的S2I脚本(见3.2,有关这些脚本的更多信息见上文“源代码到镜像框架和脚本”部分),S2I脚本已了解如何设置和运行常见Node.js应用。
3.1. 使用自定义设置
创建包含以下内容的Dockerfile:
FROM docker.xuanyuan.run/ubi8/nodejs-12 # 添加应用源代码 ADD app-src . # 安装依赖 RUN npm install # 运行脚本使用标准方式启动应用 CMD npm run -d start
3.2. 使用S2I脚本
创建包含以下内容的Dockerfile:
FROM docker.xuanyuan.run/ubi8/nodejs-12 # 将应用源代码添加到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 node-app .
podman run -d node-app
应用开发人员可使用以下环境变量在OpenShift中配置此镜像的运行时行为:
NODE_ENV
NodeJS运行模式(默认:"production")
DEV_MODE
设为"true"时,将使用nodemon在开发过程中自动重新加载服务器(默认:"false")。将DEV_MODE设为"true"会将NODE_ENV默认值改为"development"(若未显式设置)。
NPM_RUN
选择在package.json文件的https://docs.npmjs.com/misc/scripts部分定义的备用/自定义运行模式(默认:npm run "start")。使用DEV_MODE时,这些用户定义的运行脚本不可用。
HTTP_PROXY
在组装期间使用npm代理
HTTPS_PROXY
在组装期间使用npm代理
NPM_MIRROR
在构建过程中使用自定义NPM registry镜像下载包
定义环境变量的一种方式是在仓库的.s2i/environment文件中包含键值对。
示例:DATABASE_USER=sampleUser
注意:定义自定义“DEV_MODE”
以下package.json示例包含scripts.dev条目。您可在应用的package.json文件中定义自己的自定义https://docs.npmjs.com/cli/run-script脚本。
注意:设置日志输出详细程度
要更改npm install期间的日志输出级别,可设置npm_config_loglevel环境变量。详见https://docs.npmjs.com/misc/config。
该镜像支持开发模式,可通过环境变量DEV_MODE切换,取值为true或false。开发模式支持以下特性:
调试端口可通过环境变量DEBUG_PORT指定,仅当DEV_MODE=true时有效。
在开发模式下运行容器的简单示例命令:
podman run --env DEV_MODE=true my-image-id
要在开发模式下运行容器并设置调试端口为5454:
$ podman run --env DEV_MODE=true DEBUG_PORT=5454 my-image-id
在生产模式下运行容器:
$ podman run --env DEV_MODE=false my-image-id
默认情况下,DEV_MODE设为false,DEBUG_PORT设为5858,但DEBUG_PORT仅在DEV_MODE=true时生效。
作为开发模式的一部分,该镜像支持热部署。启用开发模式后,运行中容器内源代码的任何更改将立即反映在运行的Node.js应用中。
要在运行中的容器中修改源代码,使用Podman的https://github.com/containers/libpod命令:
$ podman exec -it <CONTAINER_ID> /bin/bash
通过podman exec进入运行中的容器后,当前目录设为/opt/app-root/src,即应用源代码所在位置。
若已将容器部署到OpenShift,可使用https://docs.openshift.org/latest/dev_guide/copy_files_to_container.html将本地文件复制到OpenShift pod中运行的远程容器。
警告:
s2i-nodejs容器镜像的默认行为是使用npm start命令运行Node.js应用,该命令执行package.json文件中的start脚本。在开发模式下,应用使用nodemon运行。nodemon的默认行为是查找package.json文件中的main属性并执行该脚本;若main属性不存在,则执行start脚本。因此,为确保生产模式和开发模式下功能一致,用户应移除main属性。
以下是包含scripts.dev条目的package.json示例。您可在应用的package.json文件中定义自己的自定义https://docs.npmjs.com/cli/run-script脚本:
json{ "name": "node-echo", "version": "0.0.1", "description": "node-echo", "main": "example.js", <--- main属性 "dependencies": { }, "devDependencies": { "nodemon": "*" }, "engine": { "node": "*", "npm": "*" }, "scripts": { "dev": "nodemon --ignore node_modules/ server.js", "start": "node server.js" <-- start脚本 }, "keywords": [ "Echo" ], "license": "", }
注意:
oc rsync仅在OpenShift 3.1+版本中可用。
Dockerfile和其他源代码可在https://github.com/sclorg/s2i-nodejs-container获取。该仓库中还包含其他版本的Node.js环境Dockerfile。CentOS的Dockerfile名为`Dockerfile`,RHEL7的为`Dockerfile.rhel7`,RHEL8的为`Dockerfile.rhel8`,Fedora的为`Dockerfile.fedora`。
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务