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

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

如何將 Docker Web 應用程序容器連接到 Docker PostgreSQL 容器?

如何將 Docker Web 應用程序容器連接到 Docker PostgreSQL 容器?

Go
忽然笑 2021-12-27 17:48:12
我正在練習制作一個與 PostgreSQL 數據庫交互的 Golang Web 應用程序,每個應用程序都在自己的容器上運行。我正在運行容器 docker-compose up但是我似乎未能正確設置 postgres 容器。為簡潔起見,指向Dockerfiles 和其他設置文件的鏈接位于此要點上(如果您需要,請在此處告訴我)。version: '2'services:  web_app:    build: dockerfiles/web_app    ports:      - "9000:9000"    volumes:      - .:/go/src/gitlab.com/repo/web_app    # links might be replaced by depends_on.    # links:    #   - db    depends_on:      - db    # tty and stdin_open cause docker-compose to disconnect from docker-machine after 60sec.    # A fix is on the way.    # tty: true    # stdin_open: true  db:    build: dockerfiles/db    volumes:      - data:/var/lib/postgresql/datavolumes:  data: {}docker-compose up工作正常。但是當應用程序嘗試打開一個數據庫連接時:var pgConf string = "user=web_app dbname=web_app sslmode=verify-full password=password"db, err := sql.Open("postgres", pgConf)我從 docker compose 收到以下錯誤:Error creating new user:  dial tcp [::1]:5432: getsockopt: connection refused我該怎么做才能讓兩個容器相互通信?
查看完整描述

1 回答

?
千萬里不及你

TA貢獻1784條經驗 獲得超9個贊

使用 docker-compose v2 時,不需要在服務之間創建鏈接。Docker 1.9 和 1.10 允許您通過名稱連接到同一(自定義)網絡上的其他容器。


您應該能夠使用服務名稱或容器名稱作為主機名進行連接。鑒于容器的名稱是由 docker-compose 生成的,使用起來并不方便,因此 docker-compose 還為每個容器添加了一個帶有服務名稱的別名。


以這個非常簡單的例子為例。為方便起見,我使用了 Nginx 容器,但同樣適用于您的情況;


version: '2'

services:

  web_app:

    image: nginx

  db:

    image: nginx

首先啟動項目(假設;


$ docker-compose --project-name=test up -d

Creating network "test_default" with the default driver

Creating test_db_1

Creating test_web_app_1

然后從test_web_app_1容器內部ping“db”服務:


$ docker exec -it test_web_app_1 ping -c 2 db

PING db (172.18.0.2): 56 data bytes

64 bytes from 172.18.0.2: icmp_seq=0 ttl=64 time=0.108 ms

64 bytes from 172.18.0.2: icmp_seq=1 ttl=64 time=0.243 ms

--- db ping statistics ---

2 packets transmitted, 2 packets received, 0% packet loss

round-trip min/avg/max/stddev = 0.108/0.175/0.243/0.068 ms

如果檢查test_db_1容器,可以看到 docker-compose 自動為test_db_1容器添加了“db”別名;


$ docker inspect test_db_1

給:(只是NetworkSettings.Networks部分)


"Networks": {

    "test_default": {

        "IPAMConfig": null,

        "Links": null,

        "Aliases": [

            "db",

            "002b1875e61f"

        ],

        "NetworkID": "0f9e2cddeca79e5a46c08294ed61dee273828607f99014f6410bda887626be70",

        "EndpointID": "a941ab95586a8fdafc5075f9c5c44d745f974e5790ef6048b9e90115a22fb31f",

        "Gateway": "172.18.0.1",

        "IPAddress": "172.18.0.2",

        "IPPrefixLen": 16,

        "IPv6Gateway": "",

        "GlobalIPv6Address": "",

        "GlobalIPv6PrefixLen": 0,

        "MacAddress": "02:42:ac:12:00:02"

    }

}


查看完整回答
反對 回復 2021-12-27
  • 1 回答
  • 0 關注
  • 187 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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