繁体   English   中英

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

[英]dial tcp 127.0.0.1:8000: connect: connection refused golang docker containers

我正在尝试使用 GO 从一个项目向另一个项目发出 http 请求。 发出请求的项目具有以下 dockerfile:

FROM golang:alpine as builder
WORKDIR /build
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -ldflags '-extldflags "-static"' -o main .
FROM scratch
WORKDIR /app
COPY --from=builder /build .
CMD ["./main"]

正在等待请求的项目在 localhost:8000 上运行,它具有以下 dockerfile:

FROM golang:1.13.8 AS build-env
ADD . /dockerdev
WORKDIR /dockerdev
RUN go get -d -v ./...
RUN go build -o /server
# Final stage
FROM debian:buster
EXPOSE 8000
WORKDIR /
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 新手,欢迎任何改进!

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

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这样的东西,它允许你简单地链接容器和它们的网络。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM