
如果你使用 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 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
本仓库包含用于Vespa开发的Docker镜像,分别基于AlmaLinux 8(Vespa 8)和CentOS 7(Vespa 7)。其中:
vespa-dev-almalinux-8 依赖于 vespa-build-almalinux-8。
适用于Vespa开发人员进行以下工作:
支持Vespa 8(基于AlmaLinux 8)和Vespa 7(基于CentOS 7)的开发。
bashdocker pull docker.io/vespaengine/vespa-build-almalinux-8:latest docker pull docker.io/vespaengine/vespa-dev-almalinux-8:latest
以下指南介绍如何使用Docker或Podman在AlmaLinux 8上构建、单元测试和系统测试Vespa。如果使用Podman,将命令中的docker替换为podman即可。
Docker配置
Docker on macOS
确保Docker拥有足够资源:
Docker on Linux
确保无需sudo即可执行Docker:
bashsudo groupadd docker sudo usermod -aG docker $(id -un) sudo systemctl restart docker
注销并重新登录,或运行sudo su - $USER继续。
Podman on macOS
安装Podman Desktop:
bashbrew install podman-desktop
创建具有足够资源的Podman Machine(偏好设置 - 资源 - 创建新机器):
也可通过命令行创建:
bashpodman machine init --cpus=8 --memory=16384 --disk-size=128 --rootful
容器设置
下载最新镜像
bashdocker pull docker.io/vespaengine/vespa-dev-almalinux-8:latest
创建容器
远程调试(可选)
如需附加远程调试器(如IntelliJ),需在创建容器时添加端口转发(容器创建后无法添加)。例如允许5005端口调试:
bash-p 127.0.0.1:5005:5005 \
使用Docker卷(macOS推荐)
bashdocker volume create volume-vespa-dev-almalinux-8
bashdocker create \ -p 127.0.0.1:3334:22 \ -v volume-vespa-dev-almalinux-8:/home/$(id -un) \ --privileged \ --pids-limit -1 \ --name vespa-dev-almalinux-8 \ docker.io/vespaengine/vespa-dev-almalinux-8:latest
使用目录挂载(Linux推荐)
bashmkdir -p $HOME/volumes/vespa-dev-almalinux-8
bashdocker create \ -p 127.0.0.1:3334:22 \ -v $HOME/volumes/vespa-dev-almalinux-8:/home/$(id -un) \ --privileged \ --pids-limit -1 \ --name vespa-dev-almalinux-8 \ docker.io/vespaengine/vespa-dev-almalinux-8:latest
启动容器
bashdocker start vespa-dev-almalinux-8
配置容器
确保拥有SSH密钥(如无,参考https://help.github.com/en/github/authenticating-to-github/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent%EF%BC%89%EF%BC%9A
bashmkdir -p $HOME/git cd $HOME/git git clone git@github.com:vespa-engine/docker-image-dev.git cd $HOME/git/docker-image-dev/dev/almalinux-8 ./configure-container.sh docker vespa-dev-almalinux-8
此脚本会添加用户、复制授权密钥并设置构建所需环境变量。
构建镜像(可选)
如需测试镜像修改:
bashcd $HOME/git/docker-image-dev/dev/almalinux-8 docker build -t vespaengine/vespa-dev-almalinux-8:latest .
构建Vespa
SSH进入容器
bashssh -A 127.0.0.1 -p 3334
如SSH失败,参见SSH故障排除
克隆Vespa代码库
bashmkdir -p $HOME/git cd $HOME/git git clone git@github.com:vespa-engine/vespa.git cd $HOME/git/vespa
清理旧状态(如使用持久卷)
bashgit clean -fdx ccache --clear
构建Java模块
bash./bootstrap.sh java mvn clean install --threads 1C -Dmaven.javadoc.skip=true -Dmaven.source.skip=true -DskipTests
构建C++模块
bashcd $HOME/git/vespa cmake3 . make -j 9
编译线程数(-j参数)设置为CPU核心数+1。
针对新CPU架构优化构建
可使用-march=和-mtune=指定CPU架构,参考https://gcc.gnu.org/onlinedocs/gcc/x86-Options.html#x86-Options%E3%80%82%E4%BE%8B%E5%A6%82%E9%92%88%E5%AF%B9Haswell%E6%9E%B6%E6%9E%84%EF%BC%9A
bashcmake3 -DVESPA_CPU_ARCH_FLAGS="-march=haswell -mtune=skylake" .
安装模块
bashmake install/fast
默认安装目录为$HOME/vespa($VESPA_HOME)。
运行单元测试
测试所有Java模块
bashmvn test --threads 1C
测试特定Java模块(如container-search)
bashmvn test --threads 1C -pl container-search
测试所有C++模块
bashctest -j 9
测试特定C++模块(如searchlib)
bashctest -j 9 -R "^searchlib_"
运行系统测试
克隆system-test代码库
bashcd $HOME/git git clone git@github.com:vespa-engine/system-test.git
系统测试脚本已在容器的PATH中。
复制功能标志覆盖配置
bashcp $HOME/git/system-test/docker/include/feature-flags.json $HOME/vespa/var/vespa/flag.db
在一个终端启动nodeserver
bashnodeserver.sh
在另一个终端运行系统测试
bashcd $HOME/git/system-test/tests/search/basicsearch runtest.sh basic_search.rb
使用Sanitizer工具构建和运行
Vespa支持使用https://github.com/google/sanitizers%E5%AF%B9C++%E4%BB%A3%E7%A0%81%E8%BF%9B%E8%A1%8C%E6%A3%80%E6%B5%8B%E3%80%82
使用Sanitizer构建C++代码
通过VESPA_USE_SANITIZER=sanitizer参数指定Sanitizer类型:
address - AddressSanitizerthread - ThreadSanitizerundefined - UndefinedBehaviorSanitizer一次只能使用一种Sanitizer。例如使用ThreadSanitizer:
bashcmake3 -DVESPA_USE_SANITIZER=thread .
使用Sanitizer时不会构建vespamalloc,因为两者都会拦截malloc调用。
运行带Sanitizer的单元测试
可直接运行测试,如需循环运行特定测试(如检测偶发问题):
bashGTEST_FILTER=MyFlakyTestSuite.my_flaky_test_case;GTEST_REPEAT=100;TSAN_OPTIONS=halt_on_error=1;GTEST_FAIL_FAST=1
使用ThreadSanitizer时,需指定抑制文件:
bashTSAN_OPTIONS="suppressions=/home/myuser/git/vespa/tsan-suppressions.txt"
运行带Sanitizer的系统测试
启动nodeserver前设置环境变量:
bashexport TSAN_OPTIONS="suppressions=/home/myuser/git/vespa/tsan-suppressions.txt log_path=/home/myuser/tsan_logs/log history_size=7 detect_deadlocks=1 second_deadlock_stack=1" nodeserver.sh
故障排除
如启动时出现Sanitizer错误(如failed to intercept munmap),需清理安装目录并重新安装:
bashrm -rf $HOME/vespa make install/fast
在macOS上通过X11转发使用CLion或IntelliJ
安装XQuartz
下载并安装https://www.xquartz.org/%E3%80%82
配置容器内sshd使用ipv4
修改/etc/ssh/sshd_config:
AddressFamily inet
重启sshd:
bashsudo kill -HUP <sshd-pid>
通过X11转发SSH进入容器
在XQuartz终端中运行:
bashssh -Y -A 127.0.0.1 -p 3334
然后从该终端启动CLion或IntelliJ。
SSH故障排除
如SSH失败(如ssh kex_exchange_identification: Connection closed by remote host):
bashdocker exec -it vespa-dev-almalinux-8 /bin/bash
bashls -l /etc/ssh
ssh_host_*文件,生成主机密钥:bashsudo ssh-keygen -A
bash$(which sshd)
如需进一步调试,可添加-Ddp参数启动sshd,并通过ssh -vvv查看详细日志。
CentOS 7是Vespa 7(上一主要版本)的官方支持OS。如需在CentOS 7上构建、单元测试和系统测试Vespa,可按照AlmaLinux 8的指南操作,将命令中的almalinux-8替换为centos7即可。
本项目采用https://www.apache.org/licenses/LICENSE-2.0%E8%AE%B8%E5%8F%AF%E3%80%82
访问Vespa项目[***]
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务