亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從一個到另一個 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 關注
  • 122 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號