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

拨打 tcp 127.0.0.1:8000:连接:连接被拒绝 golang docker 容器

拨打 tcp 127.0.0.1:8000:连接:连接被拒绝 golang docker 容器

Go
临摹微笑 2022-06-27 17:04:00
我正在尝试使用 GO 从一个项目向另一个项目发出 http 请求。发出请求的项目具有以下 dockerfile:FROM golang:alpine as builderWORKDIR /buildCOPY . .RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -ldflags '-extldflags "-static"' -o main .FROM scratchWORKDIR /appCOPY --from=builder /build .CMD ["./main"]正在等待请求的项目正在 localhost:8000 上运行,它具有以下 dockerfile:FROM golang:1.13.8 AS build-envADD . /dockerdevWORKDIR /dockerdevRUN go get -d -v ./...RUN go build -o /server# Final stageFROM debian:busterEXPOSE 8000WORKDIR /COPY --from=build-env /server /CMD ["/server"]当我做resp, err := http.Post("http://localhost:8000/orders", "application/json", bytes.NewBuffer(requestBody))它给了我以下错误拨打 tcp 127.0.0.1:8000:连接:连接被拒绝我是 docker 新手,所以欢迎任何改进!
查看完整描述

2 回答

?
潇湘沐

TA贡献1816条经验 获得超6个赞

扩展我的评论。您的客户端代码的网络地址将不起作用:

resp, err := http.Post("http://localhost:8000/orders", "application/json", bytes.NewBuffer(requestBody)) // broken

因为它实际上是在自言自语(localhost指的是客户端docker 容器——而不是主机操作系统)。


将这两个容器暴露给您的主机操作系统的最快方法 - 出于测试目的 - 如下所示:

docker run -it --rm -p 8000:8000 dockweb  # server container
docker run -it --rm --net host dockcli    # client container

除了琐碎的测试之外,这很快就会变得笨拙。所以我建议使用docker-compose 之类的东西,它可以让你轻松地链接容器及其网络。


查看完整回答
反对 回复 2022-06-27
?
Helenr

TA贡献1780条经验 获得超3个赞

尝试使用0.0.0.0而不是localhost. 这应该可以解决连接被拒绝错误。



查看完整回答
反对 回复 2022-06-27
  • 2 回答
  • 0 关注
  • 232 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信