从一个到另一个 docker 容器的 Golang POST 请求

我在一个 docker 容器(端口 5044)中有一个服务器,在另一个 docker 容器(端口 4545)中有一个客户端。我想从客户端向服务器发送 POST 请求,但收到错误消息“发布“http://127.0.0.1:5044/check”:拨打 tcp 127.0.0.1:5044:连接:连接被拒绝”。


json, err := json.Marshal(x)

if err != nil {

    log.Fatal(err)

}

resp, err := http.Post("http://127.0.0.1:5044/check", "application/json", bytes.NewBuffer(json))

//Handle Error

if err != nil {

    log.Fatalf("An Error Occured %v", err)

}

defer resp.Body.Close()

//Read the response body

body, err := ioutil.ReadAll(resp.Body)

if err != nil {

    log.Fatalln(err)

}

return string(body)

我可以使用邮递员发送发帖请求,一切正常。我尝试连接以测试互联网服务 ( https://ptsv2.com/ ),它也能正常工作。似乎 golang 不想连接到本地服务器表单 docker:/


慕雪6442864
浏览 129回答 3
3回答

紫衣仙女

连接到 docker 容器的最佳实践是使用容器名称,例如http://app_one:5044/check,您可以使用docker ps命令找到容器名称。为了连接容器名称,所有容器都必须在同一个网络中。但如果你想使用 IP,这就是方式。每个容器都有不同的 IP 地址,为了从一个容器连接到另一个容器,您需要知道要连接的容器 IP 地址。127.0.0.1 不是容器 IP,它是主机 IP。您可以通过此命令找到容器的 IP 地址,docker inspect your_container_name您将在网络部分看到 IP"Networks": {  "bridge_network": {    "Gateway": "172.18.0.1",    "IPAddress": "172.18.0.37",    "IPPrefixLen": 16,    "IPv6Gateway": "",    "GlobalIPv6Address": "",    "GlobalIPv6PrefixLen": 0,  }}在我的示例中172.18.0.37是我的容器 IP 地址。所以我需要用它来交流,例如http://172.18.0.37:5044/check请注意 IPAddress 如果容器在您重新启动容器时可以更改,因此最好使用容器名称

ITMISS

docker-compose.yml从您的服务器文件中找到您的服务名称并将其替换为:resp,&nbsp;err&nbsp;:=&nbsp;http.Post("http://127.0.0.1:5044/check",&nbsp;"application/json",&nbsp;bytes.NewBuffer(json))有了这个:resp,&nbsp;err&nbsp;:=&nbsp;http.Post("http://<serviceName>:5044/check",&nbsp;"application/json",&nbsp;bytes.NewBuffer(json))

神不在的星期二

您的 docker 应用程序可以通过 Postman 从它的“外部端口”访问但是为了让他们一起通信,他们需要在同一个网络上最简单的方法是使用 docker-compose(而不是手动创建网络)官方链接version: '3'services:first:&nbsp; build:&nbsp; &nbsp; context: ./your-first-app&nbsp; &nbsp; dockerfile: Dockerfile&nbsp; ports:&nbsp; &nbsp; - '1800:1800'&nbsp; networks:&nbsp; &nbsp; my-network:second:&nbsp; build:&nbsp; &nbsp; context: ./your-second-app&nbsp; &nbsp; dockerfile: Dockerfile&nbsp; ports:&nbsp; &nbsp; - '1801:1801'&nbsp; networks:&nbsp; &nbsp; my-network:networks:&nbsp; my-network:您的网络在行尾声明,并通过标签网络(端口下方)链接到您的 Docker 服务
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go