本站支持搜索的镜像仓库:Docker Hub、gcr.io、ghcr.io、quay.io、k8s.gcr.io、registry.gcr.io、elastic.co、mcr.microsoft.com
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):
docker run --rm \ -v "$(pwd):/src" \ -v /var/run/docker.sock:/var/run/docker.sock \ portainer/golang-builder /src/subfolder/main
工具需要知道应用的全限定包名,可通过Go 1.4引入的规范导入路径注释指定。该注释需紧跟package子句:
package main // import "github.com/CenturyLink/hello"
工具会读取此注释,将源代码挂载到GOPATH的正确位置进行编译。
go get导入的第三方包(项目内已包含的包除外)Godeps/_workspace目录中的依赖,避免下载不同版本如需自动生成Docker镜像,项目根目录需包含Dockerfile。编译后的二进制文件会被放置在项目根目录,因此Dockerfile可假设二进制文件与自身同级:
FROM scratch EXPOSE 3000 COPY hello / ENTRYPOINT ["/hello"]
若项目根目录无Dockerfile,工具仅编译二进制文件,不生成镜像。
工具需要:
/src/var/run/docker.sock)以与Docker API交互生成镜像假设当前位于项目根目录,运行命令:
docker run --rm \ -v "$(pwd):/src" \ -v /var/run/docker.sock:/var/run/docker.sock \ portainer/golang-builder
生成的镜像默认标签为Go包名(如hello:latest)。
可在命令末尾添加自定义镜像标签:
docker run --rm \ -v "$(pwd):/src" \ -v /var/run/docker.sock:/var/run/docker.sock \ portainer/golang-builder \ centurylink/hello:1.0
不挂载Docker socket即可仅编译二进制文件(不生成镜像):
docker run --rm -v $(pwd):/src portainer/golang-builder
通过环境变量自定义编译行为:
| 环境变量 | 说明 | 默认值 |
|---|---|---|
| CGO_ENABLED | 是否启用CGO编译 | false |
| LDFLAGS | 传递给链接器的标志 | '-s' |
| COMPRESS_BINARY | 是否使用UPX压缩最终二进制文件 | false |
| OUTPUT | 通过go build -o指定二进制文件输出路径 | (空,使用默认输出路径) |
示例(启用CGO、自定义链接器标志、压缩二进制):
docker 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架构二进制):
docker 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。解决方案:
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录方式配置轩辕镜像加速服务,包含7个详细步骤
在 Linux 系统上配置轩辕镜像源,支持主流发行版
在 Docker Desktop 中配置轩辕镜像加速,适用于桌面系统
在 Docker Compose 中使用轩辕镜像加速,支持容器编排
在 k8s 中配置 containerd 使用轩辕镜像加速
在宝塔面板中配置轩辕镜像加速,提升服务器管理效率
在 Synology 群晖NAS系统中配置轩辕镜像加速
在飞牛fnOS系统中配置轩辕镜像加速
在极空间NAS中配置轩辕镜像加速
在爱快ikuai系统中配置轩辕镜像加速
在绿联NAS系统中配置轩辕镜像加速
在威联通NAS系统中配置轩辕镜像加速
在 Podman 中配置轩辕镜像加速,支持多系统
配置轩辕镜像加速9大主流镜像仓库,包含详细配置步骤
无需登录即可使用轩辕镜像加速服务,更加便捷高效
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429