本仓库包含用于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架构,参考GCC手册。例如针对Haswell架构:
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
下载并安装XQuartz。
配置容器内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即可。
本项目采用Apache License, Version 2.0许可。
访问Vespa项目主页获取更多信息。
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务