【发布时间】:2020-12-31 13:21:15
【问题描述】:
我正在尝试使用 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 新手,欢迎任何改进!
【问题讨论】:
-
第二个 docker 容器中的
127.0.0.1localhost 只会指向容器本身,而不是主机本身。删除主机名并列出端口,即:8000,并确保将端口传递到主机操作系统。 -
对不起,我没听懂……
-
Docker 容器有独立的网络栈。出于所有意图和目的,您可以在这方面将它们视为不同的计算机。因此,一个容器中的 localhost 与另一个容器中的 localhost 是不同的网络接口。见docs.docker.com/network/network-tutorial-standalone。
-
您可以创建自己的网络并连接这两个容器,也可以使用
--link选项。使用docker inspect <name-of-container>检查配置并检查网络。它应该具有相同的网关。 -
docker-compose 是一种用于编排多个 docker 容器并链接它们的网络的有用技术。
标签: docker go dockerfile