Переглянути джерело

单架构构建不能用docker buildx

黄中银 3 місяців тому
батько
коміт
9334e8ceb6

+ 5 - 9
cognio/buildDockerImage_apq2.ps1

@@ -75,16 +75,12 @@ else
     git clone $repoUrl
     cd $repoDir
 fi
-echo "配置 pip 只使用预编译包(避免 triton 编译问题)..."
+echo "配置 pip 只使用预编译包(避免编译问题)..."
 sed -i '/^FROM/a ENV PIP_ONLY_BINARY=:all:' Dockerfile
-echo "正在构建并推送 Docker 镜像..."
-docker buildx build \
-    --platform linux/arm64 \
-    $tagParams \
-    --cache-from type=local,src=`$HOME/.buildx-cache \
-    --cache-to type=local,dest=`$HOME/.buildx-cache,mode=max \
-    --push \
-    .
+echo "正在构建 Docker 镜像(原生 arm64 架构)..."
+docker build $tagParams .
+echo "正在推送 Docker 镜像..."
+docker push ${imageName}:arm64
 "@
 
 # 将脚本内容转为 base64,避免特殊字符问题

+ 5 - 9
cognio/buildDockerImage_apq3.ps1

@@ -75,16 +75,12 @@ else
     git clone $repoUrl
     cd $repoDir
 fi
-echo "配置 pip 只使用预编译包(避免 triton 编译问题)..."
+echo "配置 pip 只使用预编译包(避免编译问题)..."
 sed -i '/^FROM/a ENV PIP_ONLY_BINARY=:all:' Dockerfile
-echo "正在构建并推送 Docker 镜像..."
-docker buildx build \
-    --platform linux/amd64 \
-    $tagParams \
-    --cache-from type=local,src=`$HOME/.buildx-cache \
-    --cache-to type=local,dest=`$HOME/.buildx-cache,mode=max \
-    --push \
-    .
+echo "正在构建 Docker 镜像(原生 amd64 架构)..."
+docker build $tagParams .
+echo "正在推送 Docker 镜像..."
+docker push ${imageName}:amd64
 "@
 
 # 将脚本内容转为 base64,避免特殊字符问题

+ 18 - 10
cognio/海外构建说明.md

@@ -65,7 +65,7 @@ buildDockerImage_apq2.bat [用户名] [主机地址] [SSH端口]
 │  7. 执行构建脚本:                                           │
 │     a. 克隆/更新 Git 仓库                                    │
 │     b. 修改 Dockerfile(添加 PIP_ONLY_BINARY 环境变量)      │
-│     c. 使用 docker buildx 构建单架构镜像   
+│     c. 使用 docker build 原生构建单架构镜像                  │
 │     d. 推送到 Docker Hub                                     │
 └─────────────────────────────────────────────────────────────┘
 ```
@@ -92,9 +92,9 @@ $tmuxSession = "dbx"
 ```
 
 **各脚本默认服务器:**
-- apq2: `vps-apq2.zalhb.com`(构建 arm64)
-- apq3: `vps-apq3.zalhb.com`(构建 amd64)
-- latest: `192.168.1.99`(可在任意服务器执行
+- apq2: `vps-apq2.zalhb.com`(ARM64 原生服务器,构建 arm64)
+- apq3: `vps-apq3.zalhb.com`(x86 原生服务器,构建 amd64)
+- latest: 可在任意能访问 Docker Hub 的服务器执行
 
 ## 查看构建进度
 
@@ -110,14 +110,24 @@ ssh -t -p 22 [email protected] "tmux attach -t dbx"
 
 ## 构建产物
 
-- **apq2 目标架构**: `linux/arm64`
-- **apq3 目标架构**: `linux/amd64`
+- **apq2 目标架构**: `linux/arm64`(纯单架构镜像)
+- **apq3 目标架构**: `linux/amd64`(纯单架构镜像)
 - **latest**: 多架构 manifest(包含 amd64 + arm64)
 - **推送目标**: Docker Hub (`amwpfiqvy/cognio`)
-- **缓存位置**: 远程服务器 `$HOME/.buildx-cache`
 
 ## 构建优化
 
+### 原生架构构建
+
+脚本使用 `docker build` 在对应架构的服务器上原生构建:
+
+- **apq2 (ARM64 服务器)**: 原生构建 arm64 镜像,速度快
+- **apq3 (x86 服务器)**: 原生构建 amd64 镜像,速度快
+
+**优点**:
+- 不需要 QEMU 模拟,构建速度快
+- 推送的是纯单架构镜像,可以被 `docker manifest create` 合并
+
 ### 强制使用预编译包
 
 脚本会自动在 Dockerfile 中注入以下环境变量:
@@ -126,9 +136,7 @@ ssh -t -p 22 [email protected] "tmux attach -t dbx"
 ENV PIP_ONLY_BINARY=:all:
 ```
 
-**作用**:强制 pip 只使用预编译的 wheel 包,避免在 QEMU 模拟环境下编译 triton 等包时失败。
-
-**原因**:docker buildx 构建 arm64 镜像时使用 QEMU 模拟,某些包(如 triton)在模拟环境下编译会失败或耗时极长。
+**作用**:强制 pip 只使用预编译的 wheel 包,避免编译某些包(如 triton)时失败。
 
 ## 与国内版本的区别