如果你使用 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 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
golang-builder是一个容器化构建环境,用于编译Golang可执行包为静态链接的二进制文件。静态链接的二进制文件可在无其他依赖的容器中运行,因此能生成体积极小的镜像(基于0字节的scratch镜像,仅包含二进制文件)。相比官方golang镜像(未添加应用前已达500MB),该工具能显著减小最终镜像体积。其实现深受Xebia博客中《Create the Smallest Possible Docker Container》一文的启发。
go get获取第三方依赖,也支持Godep工具管理的依赖(使用Godeps/_workspace目录)portainer/golang-builder:cross-platform镜像,支持为不同操作系统和架构(Linux、OSX等)构建二进制文件适用于需要构建轻量级Golang应用Docker镜像的场景,尤其适合对镜像体积有严格要求的生产环境。同时支持仅编译二进制文件(不生成Docker镜像)及跨平台编译需求,满足多架构/操作系统的部署场景。
项目结构
工具默认假设"main"包(包含可执行命令的包)位于项目目录根目录。示例结构:
. ├─api │ ├─api.go │ └─api_test.go ├─greeting │ ├─greeting.go │ └─greeting_test.go ├─hello.go // main包所在文件 └─hello_test.go
如需覆盖默认main包位置,可在运行时指定main包路径(需使用容器内挂载目录前缀,如/src):
shelldocker run --rm \ -v "$(pwd):/src" \ -v /var/run/docker.sock:/var/run/docker.sock \ portainer/golang-builder /src/subfolder/main
规范导入路径
工具需要知道应用的全限定包名,可通过Go 1.4引入的规范导入路径注释指定。该注释需紧跟package子句:
gopackage main // import "github.com/CenturyLink/hello"
工具会读取此注释,将源代码挂载到GOPATH的正确位置进行编译。
依赖管理
go get导入的第三方包(项目内已包含的包除外)Godeps/_workspace目录中的依赖,避免下载不同版本Dockerfile
如需自动生成Docker镜像,项目根目录需包含Dockerfile。编译后的二进制文件会被放置在项目根目录,因此Dockerfile可假设二进制文件与自身同级:
dockerfileFROM scratch EXPOSE 3000 COPY hello / ENTRYPOINT ["/hello"]
若项目根目录无Dockerfile,工具仅编译二进制文件,不生成镜像。
编译并生成Docker镜像
工具需要:
/src/var/run/docker.sock)以与Docker API交互生成镜像假设当前位于项目根目录,运行命令:
shelldocker run --rm \ -v "$(pwd):/src" \ -v /var/run/docker.sock:/var/run/docker.sock \ portainer/golang-builder
生成的镜像默认标签为Go包名(如hello:latest)。
指定镜像标签
可在命令末尾添加自定义镜像标签:
shelldocker run --rm \ -v "$(pwd):/src" \ -v /var/run/docker.sock:/var/run/docker.sock \ portainer/golang-builder \ centurylink/hello:1.0
仅编译二进制文件
不挂载Docker socket即可仅编译二进制文件(不生成镜像):
shelldocker run --rm -v $(pwd):/src portainer/golang-builder
通过环境变量自定义编译行为:
| 环境变量 | 说明 | 默认值 |
|---|---|---|
| CGO_ENABLED | 是否启用CGO编译 | false |
| LDFLAGS | 传递给链接器的标志 | '-s' |
| COMPRESS_BINARY | 是否使用UPX压缩最终二进制文件 | false |
| OUTPUT | 通过go build -o指定二进制文件输出路径 | (空,使用默认输出路径) |
示例(启用CGO、自定义链接器标志、压缩二进制):
shelldocker run --rm \ -e CGO_ENABLED=true \ -e LDFLAGS='-extldflags "-static"' \ -e COMPRESS_BINARY=true \ -e OUTPUT=/bin/my_go_binary \ -v $(pwd):/src \ portainer/golang-builder
portainer/golang-builder:cross-platform镜像支持跨平台编译,默认生成Linux和OSX的32位及64位二进制文件(命名格式如mypackage-darwin-amd64)。可通过环境变量覆盖默认平台:
BUILD_GOOS:指定目标操作系统(如"linux"、"darwin")BUILD_GOARCH:指定目标架构(如"amd64"、"arm")示例(构建Linux的amd64和arm架构二进制):
shelldocker run --rm \ -e BUILD_GOOS="linux" \ -e BUILD_GOARCH="arm amd64" \ -v $(pwd):/src \ portainer/golang-builder:cross-platform
使用scratch镜像时,应用可能因缺少根CA证书无法访问SSL端点,报错:x509: failed to load system roots and no roots provided。解决方案:
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。



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