为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕雪6442864 2023-02-28 20:26:42
我在一个 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 Errorif err != nil {    log.Fatalf("An Error Occured %v", err)}defer resp.Body.Close()//Read the response bodybody, err := ioutil.ReadAll(resp.Body)if err != nil {    log.Fatalln(err)}return string(body)我可以使用邮递员发送发帖请求,一切正常。我尝试连接以测试互联网服务 ( https://ptsv2.com/ ),它也能正常工作。似乎 golang 不想连接到本地服务器表单 docker:/
查看完整描述

3 回答

?
紫衣仙女

TA贡献1839条经验 获得超15个赞

连接到 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 如果容器在您重新启动容器时可以更改,因此最好使用容器名称


查看完整回答
反对 回复 2023-02-28
?
ITMISS

TA贡献1871条经验 获得超8个赞

docker-compose.yml从您的服务器文件中找到您的服务名称并将其替换为:

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

有了这个:

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



查看完整回答
反对 回复 2023-02-28
?
神不在的星期二

TA贡献1963条经验 获得超6个赞

您的 docker 应用程序可以通过 Postman 从它的“外部端口”访问

但是为了让他们一起通信,他们需要在同一个网络上

最简单的方法是使用 docker-compose(而不是手动创建网络)官方链接

version: '3'

services:


first:

  build:

    context: ./your-first-app

    dockerfile: Dockerfile

  ports:

    - '1800:1800'

  networks:

    my-network:


second:

  build:

    context: ./your-second-app

    dockerfile: Dockerfile

  ports:

    - '1801:1801'

  networks:

    my-network:


networks:

  my-network:

您的网络在行尾声明,并通过标签网络(端口下方)链接到您的 Docker 服务


查看完整回答
反对 回复 2023-02-28
  • 3 回答
  • 0 关注
  • 67 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信