1 回答
TA贡献1804条经验 获得超2个赞
我阅读了官方 Docker 文档:docs.docker.com/language/golang/以及多阶段构建博客
这是我想出的解决方案,我可以在本地启动我的 Go 应用程序容器
我的 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>
然后我试着卷曲它,它确实有反应:
curl http://localhost:2345
[编辑]根据 TheFool 的建议,我直接在我的容器中使用了 go.mod 和 go.sum 的本地副本。将它从我的本地工作区复制到容器,(而不是在容器中生成 go.mod)以避免将来出现任何意外:
这是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 关注
- 447 浏览
添加回答
举报