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

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

無法在容器之間建立連接

無法在容器之間建立連接

Go
慕容708150 2023-05-15 15:15:42
我在這里包含了代碼.. https://github.com/vinceyoumans/achal問題: docker compose 文件中的兩個容器。一個是標準的 Postgress 容器。第二個是 goLang Scratch 容器。當 postgres 連接失敗時,GoLang main.go 文件會崩潰。你可以在github上看到代碼。錯誤是:撥號 tcp:在 127.0.0.11:53 上查找 postgres:沒有這樣的主機請求: 查看 main.go 和 dockercompose 文件,看看這個網絡有什么問題……我錯過了什么。主程序db, err := gorm.Open("postgres", "host='postgres' port=5432 user=docker dbname='docker' password='password'")if err != nil {    fmt.Println("============   exiting ==========")    fmt.Println(err)    panic("failed to connect database e")    //  the error i get... dial tcp: lookup postgres on 127.0.0.11:53: no such host    // panic("failed to connect database: " + err)}docker-compose.ymlversion: '3.6'services:  postgre:    image: postgres:11.1-alpine    ports:      - '5432:5432'    #network_mode: bridge    #container_name: postgres     environment:      POSTGRES_USER: 'user'      POSTGRES_PASSWORD: 'password'      POSTGRESS_DB: 'db_amex01'    volumes:      - ./init:/docker-entrypoint-initdb.d/  todo:    build: ./go_amex/    # ports:    #   - "8000:8080"# sudo docker-compose -f docker-compose.yml up#  HELP:  how would I add the goLang service from this point?
查看完整描述

3 回答

?
長風秋雁

TA貢獻1757條經驗 獲得超7個贊

您的撰寫文件中有錯字。為服務名稱自動配置 DNS 別名,并為您的項目創建默認的 docker 網絡。因此,所需要的只是連接到服務名稱,在您的情況下是“postgre”而不是“postgres”。要解決此問題,請嘗試使用此撰寫文件:


version: '3.6'

services:

? postgres:

? ? image: postgres:11.1-alpine

? ? ports:

? ? ? - '5432:5432'

? ? environment:

? ? ? POSTGRES_USER: 'user'

? ? ? POSTGRES_PASSWORD: 'password'

? ? ? POSTGRESS_DB: 'db_amex01'

? ? volumes:

? ? ? - ./init:/docker-entrypoint-initdb.d/


? todo:

? ? build: ./go_amex/

? ? # ports:

? ? #? ?- "8000:8080"


請注意,您可能會看到的下一個錯誤是連接被拒絕。Compose 將同時啟動兩個容器,您的應用程序可能會在數據庫完成啟動之前運行。要解決這個問題,您需要在應用程序代碼中使用重試循環,重試之間有一個短暫的延遲,以及超時或重試限制。


查看完整回答
反對 回復 2023-05-15
?
12345678_0001

TA貢獻1802條經驗 獲得超5個贊

您缺少網絡配置。如果你想在容器之間進行通信,這是必需的。


version: '3.6'

services:

  postgres: # you were missing the 's'

    image: postgres:11.1-alpine

    ports:

      - '5432:5432'

    networks:

      - mynet


    environment:

      POSTGRES_USER: 'user'

      POSTGRES_PASSWORD: 'password'

      POSTGRESS_DB: 'db_amex01'

    volumes:

      - ./init:/docker-entrypoint-initdb.d/


  todo:

    build: ./go_amex/

    ports:

      - "8000:8000" # I looked at your main.go file, it's port 8000!

    networks:

      - mynet


networks:

  mynet:

    driver: bridge

現在您可以通過使用服務名稱作為主機名來查看(通過 dns 解析)容器內的每個服務。


查看完整回答
反對 回復 2023-05-15
?
楊__羊羊

TA貢獻1943條經驗 獲得超7個贊

問題是 docker_compose 文件中的拼寫錯誤。將 postgres 容器標記為 postgre。這解決了網絡查找問題。



查看完整回答
反對 回復 2023-05-15
  • 3 回答
  • 0 關注
  • 284 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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