type
status
date
slug
summary
tags
category
created days
new update day
icon
password
Created_time
Dec 5, 2022 09:33 AM
Last edited time
Mar 1, 2025 01:50 AM
使用 Github Action 构建多平台 nginx-proxy
一直都在使用 nginx-proxy 与 letsencrypt-nginx-proxy-companion 作为自动化的反向代理(可以自动续签证书、以及拥有服务发现的功能),但是比较烦恼的就是官方只提供了
amd64
平台的镜像,这让我这个想在树莓派上运行它的人可给苦恼坏了。所以想到了使用 Github Action
完成多平台的构建。分析项目
下面是 nginx-proxy 的 Dockerfile,我们可以看到它依赖于 forego 与 docker-gen 很遗憾这两个软件也只有 amd64 的版本,而且
docker-gen
还依赖于另一个第三方依赖管理软件、巧了这个也只有 amd64 版本(我觉得我现在的头非常大),不过还好都开源,而且都是使用Go写的,这也就说我能够再次编译它实现多平台。编写 Dockerfile
第一种解决方案
即在 Github Action 的运行镜像中直接获取相应依赖的源码进行编译,然后再根据
nginx-proxy
的 Dckerfile
进行修改后编译,想法可行,然而在进行实施的时候却遇到了问题,即无法找到相应的依赖文件,它总是去根目录下去寻找,多此更改路径也无用,最终放弃该方案。failed to solve: rpc error: code = Unknown desc = failed to compute cache key: "/docker-gen" not found: not found
第二种方案
第二种方案就是,不使用原项目的
Dockerfile
新建一个构建使用的 Dockerfile
,前后分为两个构建阶段:第一阶段使用 golang
镜像构建所需依赖,第二阶段从第一阶段的产物中获取所需依赖,完成第二阶段的构建。golang 镜像构建完成的二进制文件默认在 /go/bin
下(当时找了挺久一直以为在 ~/go/bin
)。编写 Github Action
Github Action 为了获取最新代码,对相应的项目进行了 clone 操作,此方式可操作性极大。😉😉😉
最终成果

- 作者:tangcuyu
- 链接:https://expoli.tech/articles/2021/01/05/1609812943066
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章