如果你使用 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 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
适用于Juniper vMX 18.2及更新版本
适用于Juniper vMX 18.1及更早版本
https://hub.docker.com/r/juniper/openjnpr-container-vmx/
新特性:vMX 18.4同样适用
该Docker容器用于在裸金属计算节点上启动Junos vMX 17.3及更新版本。Junos控制平面(VCP)运行在Qemu-kvm之上,而转发平面(VFP/RIOT)则在容器中本地运行:
+------------------------------+ | +-------------+ | | | Junos VCP | | | | qcow2 VM | | | +-------------+ | | +-------------+ +--------+ | | | qemu-system | | riot | | | +-------------+ +--------+ | +------------------------------+
docker run启动为了构建和启动容器,必须安装以下软件包。以下是ubuntu 18.04的示例,其他系统请相应调整:
$ sudo apt-get update $ sudo apt-get install make git docker.io docker-compose
$ pwd /home/lab $ git clone https://github.com/Juniper/OpenJNPR-Container-vMX.git $ cd OpenJNPR-Container-vMX
从vmx-bundle-.tgz文件中下载并解压qcow2镜像,该文件可从[**]
$ pwd /home/lab/OpenJNPR-Container-vMX tar zxf vmx-bundle-18.2R1.9.tgz $ mv vmx/images/junos-vmx-x86-64-18.2R1.9.qcow2 . $ rm -rf vmx
无需保留bundle中的其他文件,因此可以删除提取的文件。
调整vmx1和vmx2的环境变量IMAGE,使其与qcow2文件名匹配。
如果Junos版本为18.2R1或更新,确保使用容器镜像juniper/openjnpr-container-vmx:bionic。对于任何18.1及更早的Junos版本,使用容器镜像juniper/openjnpr-container-vmx:trusty。
如果未修改,compose文件默认期望当前目录中存在junos-vmx-x86-64-18.2R1.9.qcow2和junos-vmx-x86-64-18.1R1.9.qcow2。
通过内核选项定义至少1024个2MB大页或2个1GB大页,在文件/etc/default/grub中添加:
GRUB_CMDLINE_LINUX="default_hugepagesz=1G hugepagesz=1G hugepages=2"
或
GRUB_CMDLINE_LINUX="hugepages=1024"
然后运行update-grub并重启:
$ sudo update-grub $ reboot
系统重启后,检查大页内存可用性(示例显示保留了16个1GB页):
$ cat /proc/meminfo |grep Huge AnonHugePages: 0 kB ShmemHugePages: 0 kB HugePages_Total: 16 HugePages_Free: 16 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 1048576 kB
创建或检查是否存在基于rsa的ssh公钥/私钥对,通常位于~/.ssh/:
$ ls ~/.ssh/ authorized_keys id_rsa id_rsa.pub known_hosts
id_rsa.pub文件的内容将在运行时自动用于在Junos配置文件中创建登录用户,允许无需密码ssh登录vMX实例。
要创建新的密钥对,使用以下命令并接受所有默认值:
$ ssh-keygen -t rsa
将自定义YANG模式、偏差文件和动作脚本文件放在与配置相同的位置,并通过docker-compose.yml中的以下环境变量命名:
YANG_SCHEMA="l2vpn.yang" YANG_DEVIATION="l2vpn-dev.yang" YANG_ACTION="l2vpn.slax" YANG_PACKAGE="custom-l2vpn"
这些文件将自动添加到配置驱动器,并附带一个执行脚本,在加载和检查提供的Junos配置之前激活它们。
此步骤可选,因为预构建的容器将自动从Docker Hub下载。要在本地构建容器,使用make build,然后通过docker images检查二进制容器:
$ make build ... Successfully tagged juniper/openjnpr-container-vmx:bionic ... Successfully tagged juniper/openjnpr-container-vmx:trusty $ docker images | head -3 REPOSITORY TAG IMAGE ID CREATED SIZE juniper/openjnpr-container-vmx trusty 8436770a23eb 1 minute ago 597MB juniper/openjnpr-container-vmx bionic 7a85db4edd94 1 minute ago 428MB
现在可以启动镜像了。vmx1在仓库目录中有一个配置文件vmx1.conf,其中只包含一行apply-group。该组在运行时自动生成。vmx2没有配置文件,因此apply-group语句自动生成。这为用户提供了使用或不使用自动生成配置组的灵活性。
重要:必须以非root用户运行make。否则公钥将不允许自动访问。
$ make up docker-compose up -d Creating network "openjnprcontainervmx_net-c" with the default driver Creating network "openjnprcontainervmx_net-b" with the default driver Creating network "openjnprcontainervmx_net-a" with the default driver Creating network "openjnprcontainervmx_mgmt" with the default driver Creating openjnprcontainervmx_vmx2_1 ... done Creating openjnprcontainervmx_vmx1_1 ... done
如果一切顺利,通过docker ps可以看到2个运行中的容器:
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cdbb818b9afc juniper/openjnpr-container-vmx:bionic "/launch.sh" 35 seconds ago Up 33 seconds 0.0.0.0:32913->22/tcp, 0.0.0.0:32912->830/tcp openjnprcontainervmx_vmx1_1 749f148658d2 juniper/openjnpr-container-vmx:trusty "/launch.sh" 35 seconds ago Up 31 seconds 0.0.0.0:32915->22/tcp, 0.0.0.0:32914->830/tcp openjnprcontainervmx_vmx2_1
如果没有显示,则容器可能已错误终止。仍可通过docker ps -a查看容器名称(显示已终止的容器),并使用docker logs <container>获取详细信息。以下是健康容器的日志示例:
$ docker logs openjnprcontainervmx_vmx1_1 Juniper Networks vMX Docker Light Container Linux cdbb818b9afc 4.15.0-29-generic #31-Ubuntu SMP Tue Jul 17 15:39:52 UTC 2018 x86_64 CPU Model ................................ Intel(R) Core(TM) i7-7700 CPU @ 3.60GHz CPU affinity of this container ........... 0-7 KVM hardware virtualization extension .... yes Total System Memory ...................... 62 GB Free Hugepages ........................... yes (16 x 1024 MB = 16384 MB) Check for container privileged mode ...... yes Check for sudo/root privileges ........... yes Loop mount filesystem capability ......... yes docker access ............................ CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cdbb818b9afc juniper/openjnpr-container-vmx:bionic "/launch.sh" 2 seconds ago Up Less than a second 0.0.0.0:32913->22/tcp, 0.0.0.0:32912->830/tcp openjnprcontainervmx_vmx1_1 yes ...(日志内容省略)...
使用make ps或./getpass.sh获取容器IP地址和自动生成的root密码(仅在缺少ssh id_rsa.pub密钥时需要):
./getpass.sh vMX openjnprcontainervmx_vmx1_1 (172.21.0.2) 18.2R1.9 deica3ootiojohsha5Eethae ... vMX openjnprcontainervmx_vmx2_1 (172.21.0.3) 18.1R1.9 eihaekahpeetungeekeerohr ...
每行末尾的'...'表示vMX尚未完全运行。重复上述步骤,直到显示'ready':
$ ./getpass.sh vMX openjnprcontainervmx_vmx1_1 (172.21.0.2) 18.2R1.9 deica3ootiojohsha5Eethae ready vMX openjnprcontainervmx_vmx2_1 (172.21.0.3) 18.1R1.9 eihaekahpeetungeekeerohr ready
此过程通常不到5分钟。
"ready"表示vMX已启动并运行,转发引擎已附加接口并正常工作。如果未显示"ready",请参见“故障排除”部分。
使用./getpass.sh输出中显示的IP地址登录vMX:
$ ssh 172.21.0.2 The authenticity of host '172.21.0.2 (172.21.0.2)' can't be established. ECDSA key fingerprint is SHA256:bMtOBbwBrgVcSGWc8FfNHj3Wwm029KBu/mByJWSCBp0. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '172.21.0.2' (ECDSA) to the list of known hosts. --- JUNOS 18.2R1.9 Kernel 64-bit JNPR-11.0-20180614.6c3f819_buil mwiget@openjnprcontainervmx_vmx1_1> show chassis fpc Temp CPU Utilization (%) CPU Utilization (%) Memory Utilization (%) Slot State (C) Total Interrupt 1min 5min 15min DRAM (MB) Heap Buffer 0 Online Testing 4 0 3 1 0 2047 7 0 1 Empty 2 Empty 3 Empty 4 Empty 5 Empty 6 Empty 7 Empty 8 Empty 9 Empty 10 Empty 11 Empty mwiget@openjnprcontainervmx_vmx1_1> show interfaces descriptions Interface Admin Link Description ge-0/0/0 up up openjnprcontainervmx_net-a ge-0/0/1 up up openjnprcontainervmx_net-b ge-0/0/2 up up openjnprcontainervmx_net-c fxp0 up up openjnprcontainervmx_mgmt
接口描述通过临时数据库提供:
mwiget@openjnprcontainervmx_vmx1_1> show ephemeral-configuration instance openjnpr-container-vmx-vfp0 ## Last changed: 2018-07-23 11:33:48 UTC interfaces { ge-0/0/0 { description openjnprcontainervmx_net-a; } ge-0/0/1 { description openjnprcontainervmx_net-b; } ge-0/0/2 { description openjnprcontainervmx_net-c; } fxp0 { description openjnprcontainervmx_mgmt; } }
登录和fxp0配置通过应用组提供。实际密码和密钥通过省略带有注释'## SECRET-DATA'
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。

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