Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
拨打tcp 127.0.0.1:8000:连接:连接被拒绝的golang docker容器_Docker_Go_Dockerfile - Fatal编程技术网

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

拨打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

我正在尝试使用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"]
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更新答案,并提供一些短期和长期建议。