构建问题排查
本页面介绍 MANYOYO 镜像构建过程中可能遇到的问题及解决方案。 默认示例使用 1.8.0-common;如你使用其他标签,请替换为实际版本。
镜像构建失败
问题描述
执行 manyoyo build 时报错,构建过程中断。
常见错误信息
bash
# 网络超时
Error: unable to download from https://...
Error: connection timeout
# 磁盘空间不足
Error: no space left on device
# 权限问题
Error: permission denied while trying to connect to the Docker daemon socket解决方案
1. 检查网络连接
bash
# 测试国内镜像源
curl -I https://mirrors.tencent.com
# 测试 npm 镜像
curl -I https://registry.npmmirror.com
# 如果网络不通,检查代理设置
echo $HTTP_PROXY
echo $HTTPS_PROXY配置代理(如果需要):
bash
# 临时设置代理
export HTTP_PROXY=http://proxy.example.com:8080
export HTTPS_PROXY=http://proxy.example.com:8080
# 或在 Docker/Podman 配置中设置代理
# Docker: ~/.docker/config.json
# Podman: ~/.config/containers/containers.conf2. 检查磁盘空间
bash
# 查看磁盘空间(需要至少 10GB)
df -h
# 清理 Docker/Podman 缓存
docker system prune -a # 或 podman system prune -a
# 清理悬空镜像
manyoyo prune3. 使用 --yes 跳过确认
bash
# 跳过所有交互式确认
manyoyo build --iv 1.8.0-common --yes4. 国外用户修改镜像源
如果在国外,可能需要禁用国内镜像源:
编辑 docker/manyoyo.Dockerfile,注释掉镜像源相关的 ARG:
dockerfile
# ARG NODE_MIRROR=https://mirrors.tencent.com/nodejs-release/
# ARG NPM_REGISTRY=https://registry.npmmirror.com或使用空值:
bash
manyoyo build --iv 1.8.0-common --iba NODE_MIRROR= --iba NPM_REGISTRY=5. 分步构建调试
bash
# 先构建基础版本(更快,问题更少)
manyoyo build --iv 1.8.0-common --iba TOOL=common
# 基础版本成功后,再构建完整版本
manyoyo build --iv 1.8.0-full --iba TOOL=full6. 查看详细构建日志
bash
# 保存构建日志
manyoyo build --iv 1.8.0-common 2>&1 | tee build.log
# 查找错误关键字
grep -i "error\|failed\|fatal" build.log构建超时
问题:构建过程中下载文件超时
解决方案:
bash
# 增加 Docker/Podman 超时时间
# Docker: 编辑 /etc/docker/daemon.json
{
"max-concurrent-downloads": 3,
"max-download-attempts": 5
}
# 重启 Docker
sudo systemctl restart docker
# 或使用缓存加速(推荐)
# MANYOYO 会自动缓存下载的文件到 docker/cache/
# 首次构建后,2天内再次构建会使用缓存,速度提升约 5 倍Git SSL 验证问题
问题:构建时 Git 报 SSL 证书验证失败
解决方案:
bash
# 构建时跳过 Git SSL 验证(不推荐,仅限开发环境)
manyoyo build --iv 1.8.0-common --iba GIT_SSL_NO_VERIFY=true镜像拉取失败
问题描述
运行 manyoyo 命令时提示:
bash
Error: pinging container registry localhost failed原因
MANYOYO 默认使用本地镜像(localhost/xcanwin/manyoyo),需要先构建。
解决方案
1. 构建本地镜像(推荐)
bash
# 构建镜像
manyoyo build --iv 1.8.0-common
# 验证镜像
docker images | grep manyoyo # 或 podman images2. 修改配置使用已构建的镜像
如果已经构建了其他版本的镜像:
bash
# 查看已有镜像
docker images | grep manyoyo
# 修改全局配置
cat > ~/.manyoyo/manyoyo.json << 'EOF'
{
// 使用本机已存在的镜像标签
"imageVersion": "1.8.0-common"
}
EOF3. 指定镜像版本
bash
# 命令行指定版本
manyoyo run --iv 1.8.0-common -y c镜像不存在
问题:指定的镜像版本不存在
解决方案:
bash
# 列出所有 manyoyo 镜像
docker images | grep manyoyo
# 使用存在的版本
manyoyo run --iv <x.y.z-后缀> -y c
# 或构建新版本
manyoyo build --iv 1.8.0-common网络连接问题
DNS 解析失败
问题:构建时无法解析域名
解决方案:
bash
# 测试 DNS
nslookup mirrors.tencent.com
# 修改 Docker/Podman DNS 设置
# Docker: /etc/docker/daemon.json
{
"dns": ["8.8.8.8", "114.114.114.114"]
}
# Podman: ~/.config/containers/containers.conf
[containers]
dns_servers = ["8.8.8.8", "114.114.114.114"]
# 重启服务
sudo systemctl restart docker # 或 podman防火墙阻止
问题:防火墙阻止容器网络访问
解决方案:
bash
# 检查防火墙状态
sudo firewall-cmd --state
# 临时允许 Docker/Podman 网络
sudo firewall-cmd --zone=trusted --add-interface=docker0 # 或 cni-podman0
# 永久配置
sudo firewall-cmd --permanent --zone=trusted --add-interface=docker0
sudo firewall-cmd --reload代理配置问题
问题:需要通过代理访问网络,但构建时未使用代理
解决方案:
bash
# 配置构建时的代理
# Docker: ~/.docker/config.json
{
"proxies": {
"default": {
"httpProxy": "http://proxy.example.com:8080",
"httpsProxy": "http://proxy.example.com:8080",
"noProxy": "localhost,127.0.0.1"
}
}
}
# Podman: 使用环境变量
export HTTP_PROXY=http://proxy.example.com:8080
export HTTPS_PROXY=http://proxy.example.com:8080
export NO_PROXY=localhost,127.0.0.1
# 重新构建
manyoyo build --iv 1.8.0-common磁盘空间不足
问题描述
构建过程中报错:
bash
Error: no space left on device解决方案
1. 检查磁盘空间
bash
# 查看磁盘使用情况
df -h
# 查看 Docker/Podman 占用空间
docker system df # 或 podman system df2. 清理无用镜像和容器
bash
# 清理所有无用资源(危险!会删除所有未使用的镜像和容器)
docker system prune -a
# 或分步清理
docker container prune # 清理停止的容器
docker image prune # 清理悬空镜像
docker volume prune # 清理无用卷
# MANYOYO 提供的清理命令
manyoyo prune # 清理悬空和 <none> 镜像3. 移动 Docker/Podman 数据目录
如果系统盘空间不足,可以将数据目录移到其他盘:
Docker:
bash
# 停止 Docker
sudo systemctl stop docker
# 移动数据目录
sudo mv /var/lib/docker /mnt/large-disk/docker
# 修改配置 /etc/docker/daemon.json
{
"data-root": "/mnt/large-disk/docker"
}
# 启动 Docker
sudo systemctl start dockerPodman:
bash
# 修改配置 ~/.config/containers/storage.conf
[storage]
driver = "overlay"
graphroot = "/mnt/large-disk/podman"4. 清理构建缓存
bash
# 清理 Docker 构建缓存
docker builder prune -a
# 清理 MANYOYO 缓存(如果不需要加速)
rm -rf docker/cache/权限问题
Docker Socket 权限不足
问题:
bash
Error: permission denied while trying to connect to the Docker daemon socket解决方案:
bash
# 方案 1:将用户添加到 docker 组(推荐)
sudo usermod -aG docker $USER
# 重新登录或运行
newgrp docker
# 验证
docker ps
# 方案 2:使用 sudo(不推荐)
sudo manyoyo build --iv 1.8.0-common文件权限问题
问题:构建时无法写入文件
解决方案:
bash
# 检查目录权限
ls -la docker/
# 修改权限
chmod -R 755 docker/
# 检查 SELinux 状态(如果适用)
getenforce
# 临时禁用 SELinux(不推荐)
sudo setenforce 0平台兼容性问题
ARM64/M1 Mac 问题
问题:在 ARM64 架构(如 M1/M2 Mac)上构建失败
解决方案:
bash
# 指定平台构建
docker build --platform linux/amd64 ...
# 或使用 buildx
docker buildx build --platform linux/amd64,linux/arm64 ...
# MANYOYO 会自动检测平台,通常无需手动指定Windows WSL2 问题
问题:在 Windows WSL2 环境中构建失败
解决方案:
bash
# 确保 Docker Desktop 已启用 WSL2 后端
# 确保当前 WSL 发行版已集成 Docker
# 检查 Docker 状态
docker version
# 如果无法连接,重启 Docker Desktop
# 或在 WSL 中安装原生 Docker(推荐)缓存相关问题
缓存文件损坏
问题:使用缓存构建时报错
解决方案:
bash
# 清理缓存目录
rm -rf docker/cache/
# 重新构建(会重新下载)
manyoyo build --iv 1.8.0-common缓存未生效
问题:明明有缓存,但构建还是很慢
解决方案:
bash
# 检查缓存目录
ls -la docker/cache/
# 检查缓存时间(超过2天会重新下载)
find docker/cache/ -type f -mtime +2
# 手动更新缓存时间(不推荐)
touch docker/cache/*调试技巧
启用详细日志
bash
# 查看详细构建过程
manyoyo build --iv 1.8.0-common 2>&1 | tee build.log
# 在 Docker 中启用调试
export DOCKER_BUILDKIT=0 # 使用传统构建器,输出更详细手动构建测试
bash
# 手动构建以调试问题
cd docker/
podman build -t localhost/xcanwin/manyoyo:test-full \
-f manyoyo.Dockerfile .. \
--build-arg TOOL=full \
--no-cache \
--progress=plain # 显示详细输出分步构建
bash
# 构建到特定阶段
podman build --target=base -f docker/manyoyo.Dockerfile .
# 测试特定构建参数
manyoyo build --iv 1.8.0-common --iba TOOL=common --yes