使用alpine镜像部署go应用时踩的坑

使用alpine镜像部署go应用时踩的坑

关于交叉编译

实际上我在ubuntu的交叉编译出来的exe并不能在alpine上运行,这边采取拉镜像编译复制出来的做法,部署再用干净的alpine

拉取golang:alpine踩坑

在Dockerhub上可以找到:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

然而拉取的alpine中go版本为1.17,对于go 1.18(即使用了泛型)后的go应用就不适用了

于是我试图拉取

Image2

然而拉取失败,在拉取时卡死,我自己去看了下github的Dockerfile

实际上可能是因为阿里云镜像只拉取了alpine:latest,把github找到的镜像Dockerfile的第一行的

FROM alpine:3.19

这个改成

FROM alpine

这样就能拉取了,把这个编译好的镜像推送到自己的Dockerhub就行了

在我的场合

docker push realconsider/golang:1.21-alpine

我在alpine中编译时一直报错:

Image3

后来发现:

是因为代码中有这么一句

import "C"

把这句删掉就能编译了

在makefile中集成(编译cmd/main.go) :

简单看下脚本

#!/bin/bash

docker kill alpine3golangbulding
docker rm alpine3golangbulding

export GOPROXY=https://goproxy.cn


docker run -d -it --name alpine3golangbulding -v "$(pwd)":/app -w /app --env GOPROXY=${GOPROXY} realconsider/golang:1.21-alpine

docker exec -w /app/cmd alpine3golangbulding go build -o main main.go


docker cp alpine3golangbulding:/app/cmd/main ./main



makefile参考

export USAGE_OPTIONS

# ==============================================================================
.PHONY: help
help: Makefile
	@printf "\nUsage: make <TARGETS> <OPTIONS> ...\n\nTargets:\n"
	@sed -n 's/^##//p' $< | column -t -s ':' | sed -e 's/^/ /'
	@echo "$$USAGE_OPTIONS"
# Add a new target for build using compile.sh
.PHONY: build
build:
	@echo "===========> Building executable main"
	@./scripts/compile.sh
.PHONY: build-alpine
build-alpine:
	@echo "===========> Building executable main with docker/golang-alpine"
	@./scripts/complie-alpine.sh

猜你喜欢

转载自blog.csdn.net/qq_42901723/article/details/134916459