1 回答

TA貢獻(xiàn)2011條經(jīng)驗 獲得超2個贊
對于將來可能遇到類似問題的任何人,以下是我為完成這項工作而采取的步驟。
我將生成的工件烘焙到基礎(chǔ) docker 映像中,例如:
FROM golang:1.13.4
COPY ./foo /go/src/foo/foo
COPY ./foo.mod /go/src/foo
這繞過了必須將.so文件提交到源代碼控制,而不是簡單地將 docker 映像推送到注冊表。
任何需要此庫的服務(wù)都是從該基礎(chǔ)映像構(gòu)建的:
FROM my-foo-base:latest
COPY ./vendor ./vendor
COPY ./go.mod ./
COPY ./go.sum ./
# Put foo in /vendor so it's discoverable, and put its libs where they
# can be discovered
RUN mv /go/src/foo ./vendor && \
mv ./vendor/foo/foo/libs/*.so /usr/lib/ && \
mv ./vendor/foo/foo/include/* /usr/include/
# Copy in app code
COPY ./my-app ./my-app
# Required so the app can find the _foo.so shared object
ENV LD_LIBRARY_PATH="/vendor/foo/foo:/usr/lib:${LD_LIBRARY_PATH}"
# Build into a single binary
RUN GOOS=linux \
GOARCH=amd64 \
CGO_ENABLED=1 \
GOFLAGS=-mod=vendor \
GO111MODULE=on \
go build \
-o service ./cmd/serve/main.go
這有效,并且該服務(wù)能夠發(fā)現(xiàn) CGO 包。
- 1 回答
- 0 關(guān)注
- 138 瀏覽
添加回答
舉報