我不记得我在哪里看到它,我以为它是在Datadog或NewRelic上,或者CloudFlare上?但是我记得有人提到Golang,他们在生产中运行发布二进制文件(当然),在他们的Docker容器中,它们还包括一个单独的文件,其中包含调试符号,以防万一发生崩溃,以便能够看到发生了什么。
背景
我正在使用这样的Dockerfile在Docker中构建和运行:
# do all of our docker building in one image
FROM golang:latest as build
WORKDIR /usr/src/api
COPY go.mod go.sum ./
RUN go mod download
COPY . .
# build the application with relevant flags to make it completely self-contained for a scratch container
RUN CGO_ENABLED=0 GOOS=linux go build -ldflags "-s" -a -installsuffix cgo -o app
# and then copy the built binary to an empty image
FROM ubuntu:latest
COPY --from=build /usr/src/api/app /
COPY --from=build /usr/src/api/config.defaults.json /config.json
COPY --from=build /usr/src/api/logo.png /
# default to running in a dev environment
ENV ENV=dev
EXPOSE 8080
ENTRYPOINT ["/bin/bash"]
如果我不使用上面的标志,二进制文件将无法在和基本映像中执行:alpinescratch
standard_init_linux.go:219: exec user process caused: no such file or directory
运行此程序只是工作,因此上面的编译标志似乎可以解决 和 的问题。ubuntu:latestalpinescratch
问题
考虑到此环境,是否可以将调试符号发出到单独的文件中,以便与 Docker 映像中的静态二进制文件一起存在?go build
慕姐8265434
侃侃无极
相关分类