小编che*_*fee的帖子

禁用 cgo 来让 golang:alpine 工作有什么风险吗?

我的目标是比较我的 golang 应用程序的两个 docker 解决方案:

  1. 使用 ubuntu 作为基础镜像
  2. 使用 golang:alpine 作为基础镜像

我的 Dockerfile 非常简单,类似于:

FROM ubuntu:20.04
# FROM golang:alpine for alpine based images

# myApp binary is pre-built before running docker build
COPY bin/myApp app/myApp
COPY myApp-config.json app/myApp-config.json

CMD MYAPP_CONFIG=app/myApp-config.json ./app/myApp
Run Code Online (Sandbox Code Playgroud)

对于基于高山的图像,我在这里遇到了同样的问题,由于生成的图像中缺少 CGO 动态链接,因此 /app/myApp 无法启动。我通过在 go build 期间禁用 CGO 来解决这个问题:

CGO_ENABLED=0
Run Code Online (Sandbox Code Playgroud)

由于我对 docker 很陌生,所以我的问题是:

  1. 禁用 CGO 是否有任何风险?我的理解是go build会回退到CGO的原生go实现,但我不知道它是否有什么隐藏的陷阱。我的应用程序确实具有关键依赖性,net/http似乎需要在运行时存在 CGO。
  2. 似乎 alpine 镜像是 golang 使用的事实上的基础镜像,处理这个 CGO 问题的标准方法是什么?

谢谢!

go cgo docker alpine-linux

0
推荐指数
1
解决办法
1482
查看次数

标签 统计

alpine-linux ×1

cgo ×1

docker ×1

go ×1