1 回答

TA貢獻1804條經(jīng)驗 獲得超2個贊
我閱讀了官方 Docker 文檔:docs.docker.com/language/golang/以及多階段構(gòu)建博客
這是我想出的解決方案,我可以在本地啟動我的 Go 應(yīng)用程序容器
我的 Dockerfile:
FROM golang:1.17 AS build
WORKDIR /
COPY . .
RUN go mod init feedme
RUN go mod tidy
RUN go install github.com/go-delve/delve/cmd/dlv@latest
RUN go build -gcflags="all=-N -l" -o /feedme
RUN echo $(ls /go/bin)
FROM gcr.io/distroless/base-debian10
WORKDIR /
EXPOSE 2345
COPY --from=build /go/bin/dlv /dlv
COPY --from=build /feedme ~/feedme
#ENTRYPOINT [ "/dlv" ]
CMD ["/dlv", "--listen=:2345", "--headless=true", "--api-version=2", "--accept-multiclient", "exec", "~/feedme"]
我使用以下方式啟動我的容器:
docker run -p 2345:2345 <docker image ID>
然后我試著卷曲它,它確實有反應(yīng):
curl http://localhost:2345
[編輯]根據(jù) TheFool 的建議,我直接在我的容器中使用了 go.mod 和 go.sum 的本地副本。將它從我的本地工作區(qū)復(fù)制到容器,(而不是在容器中生成 go.mod)以避免將來出現(xiàn)任何意外:
這是Dockerfile的改進版本
FROM golang:1.17 AS build
WORKDIR /
COPY go/app/parsedata-xml-fp.go .
COPY go.mod . # just copy local go.mod
COPY go.sum .
RUN go install github.com/go-delve/delve/cmd/dlv@latest
RUN go build -gcflags="all=-N -l" -o /feedme
RUN echo $(ls /go/bin)
FROM gcr.io/distroless/base-debian10
WORKDIR /
EXPOSE 2345
COPY --from=build /go/bin/dlv /dlv
COPY --from=build /feedme ~/feedme
#ENTRYPOINT [ "/dlv" ]
CMD ["/dlv", "--listen=:2345", "--headless=true", "--api-version=2", "--accept-multiclient", "exec", "~/feedme"]
- 1 回答
- 0 關(guān)注
- 535 瀏覽
添加回答
舉報