baicai

白菜

一个勤奋的代码搬运工!

docker golang:alpine CGOイメージの正しい作成方法

C/C++ ライブラリ(たとえば Sqlite データベースのサポート)を使用するプログラムの場合、コンパイル環境で CGO を有効にする必要があります。そうしないと、パッケージ化されたプログラムは正常に実行されません(データベースの初期化に失敗します)。

この場合、build-base をインストールしてコンパイル環境を設定する必要があります。

Dockerfile の参考例は以下の通りです:

FROM golang:alpine as builder
ENV CGO_ENABLED=1
WORKDIR /app
COPY . .
RUN apk add --no-cache --update git build-base
RUN go mod tidy \
	&& go build -o api_client_linux ./cmd/api_client/


FROM alpine:latest as runner
ENV TZ=Asia/Shanghai
RUN apk --no-cache add ca-certificates tzdata libc6-compat libgcc libstdc++
WORKDIR /app

COPY --from=builder /app/api_client_linux .
VOLUME /app/conf
EXPOSE 8080

ENTRYPOINT ["./api_client_linux" ,"-c","/app/conf/config.yaml"]

イメージを実行する際にも Alpine を使用しますが、Alpine は非常に軽量であり、一般的なタイムゾーンや証明書などが含まれていないため、予期しないエラーが発生する可能性があります。そのため、これらのアイテムをインストールする必要があります:

パッケージ名用途
ca-certificates:CA 証明書、TLS 使用
tzdata:タイムゾーンの設定
libc6-compat:C 標準ライブラリ
libgcc:GCC 関連ライブラリ、CGO コンパイルプログラムの依存関係
libstdc++:C++ 標準ライブラリ
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。