拨打tcp 127.0.0.1:8000:连接:连接被拒绝的golang docker容器
我正在尝试使用GO从一个项目向另一个项目发出http请求。发出请求的项目具有以下dockerfile:拨打tcp 127.0.0.1:8000:连接:连接被拒绝的golang docker容器,docker,go,dockerfile,Docker,Go,Dockerfile,我正在尝试使用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 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"]
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"]
正在等待请求的项目正在localhost:8000上运行,它具有以下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"]
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
除了琐碎的测试之外,这可能很快变得笨拙。因此,我建议您使用类似这样的方法来轻松链接容器及其网络。
127.0.0.1
localhost在第二个docker容器中只指向容器本身,而不是主机本身。删除主机名&只需列出端口,即:8000
,并确保该端口已传递到主机操作系统。很抱歉,我不明白……Docker容器具有独立的网络堆栈。对于所有的意图和目的,你可以认为它们在这方面是不同的计算机。因此,一个容器中的localhost与另一个容器中的localhost是不同的网络接口。请参阅。您可以创建自己的网络并连接这两个容器,也可以使用--link
选项。使用docker inspect检查配置并检查网络。它应该有相同的网关。是编排多个docker容器并链接其网络的有用技术。2020/09/13 18:24:47发布“http://:8000/orders”:拨号tcp:8000:connect:connectionrefused@fbarril更新答案,并提供一些短期和长期建议。