为了账号安全,请及时绑定邮箱和手机立即绑定

我在为 golang api 构建 docker 时遇到问题

我在为 golang api 构建 docker 时遇到问题

Go
森林海 2022-05-05 17:31:40
我是码头工人的新手。我正在尝试使用回显服务器在 go 中实现 RESTfull api。我的代码在我运行时运行良好,main.go但我无法使用 docker 运行它。这是我的回声服务器:r := router.Router()r.Logger.Fatal(r.Start("localhost:8080"))这是我的 Dockerfile:FROM golang:latest AS buildENV GO111MODULE=on \    CGO_ENABLED=1#Maintainer infoLABEL maintainer="Saman Hoseini"WORKDIR /appCOPY go.mod .COPY go.sum .RUN go mod downloadCOPY . .RUN go build -o main .#this step is for CGO librariesRUN ldd main | tr -s '[:blank:]' '\n' | grep '^/' | \    xargs -I % sh -c 'mkdir -p $(dirname ./%); cp % ./%;'RUN mkdir -p lib64 && cp /lib64/ld-linux-x86-64.so.2 lib64/#Second stage of buildFROM alpine:latestRUN apk update && apk --no-cache add ca-certificates \    sqliteCOPY --from=build /app ./EXPOSE 8080ENTRYPOINT ["./main"]构建后,当我运行容器时,我面临 curl 失败:$ docker run -d -p 8080:8080 my-docker$ curl http://localhost:8080curl:(56)Recv失败:对等方重置连接我该如何解决这个问题?
查看完整描述

1 回答

?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

您需要在容器的外部端口上运行您的应用程序。

r := router.Router()
r.Logger.Fatal(r.Start(":8080"))

发生这种情况是因为该EXPOSE 8080命令转发在容器的外部端口(不是内部,如 localhost)上打开的应用程序端口。

在此之后, command docker run -d -p 8080:8080 my-docker,更准确地说是一个 parameter -p,将外部端口从您的容器转发到您机器上的外部端口。


查看完整回答
反对 回复 2022-05-05
  • 1 回答
  • 0 关注
  • 119 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号