嗨,我將 postgres 放入容器中,當我在 mi 本地 pc 中使用時,它可以作業。
在 mi PC 我有這個(是與資料庫通信的后端):
const {Pool} = require("pg");
const pool = new Pool({
user: "postgres",
password: 12345",
host: "localhost",
database: "attendancebd",
port: "2345"
});
module.exports = pool;
我用它運行我的 postgres 容器:
docker run -p 2345:5432 -d --name mypostgrescontainer -e POSTGRES_PASSWORD=12345 -e POSTGRES_DB=attendancebd postgres
后來我把mi sql表和插入這個:
docker exec -i mypostgrescontainer psql -U postgres attendancebd < D:\MyRoute\database.sql
這很好用,當我從客戶端向正在偵聽埠 2000 的后端發出請求時,后端通常會使用資料庫進行查詢
所以,我嘗試做同樣的事情,但使用 docker 容器,我有一個與客戶端,另一個與后端(快遞)和 postgres 容器,當我訪問用于客戶端的 localhost:3000 時,我可以看到界面和當我看到后端的狀態正在偵聽時,postgres 容器也在運行,但是當我嘗試在客戶端和后端之間進行操作時,這只是發送給我:
Error: connect ECONNREFUSED 127.0.0.1:2345
我嘗試將容器連接到 docker 網路,但它也沒有作業。
uj5u.com熱心網友回復:
首先,不要發布 ( -p 2345:5432) 資料庫的埠,除非您希望資料庫可以在主機的網路介面上公開訪問。發布埠時,會創建一個埠映射規則,將容器的埠暴露在主機上。對于本地計算機上的開發目的,這可能是“可以的”,但如果您的主機可從(公共)網路訪問,則可能不理想。
如果您希望后端容器與資料庫容器連接,您可以使用容器網路并將兩個容器都連接到該網路。例如;
創建一個名為的網路mynetwork:
docker network create mynetwork
然后,在創建容器時,設定--network=mynetwork選項,例如:
docker run -d --name mypostgrescontainer --network=mynetwork -e POSTGRES_PASSWORD=12345 -e POSTGRES_DB=attendancebd postgres
現在,當您的后端容器也連接到同一網路時,它可以使用該容器的名稱 ( mypostgrescontainer) 作為主機名和資料庫使用的埠號(5432在 postgres 的情況下)與資料庫容器連接
docker run -it --rm --network=mynetwork postgres psql -h mypostgrescontainer -U postgres -l
Password for user postgres:
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-------------- ---------- ---------- ------------ ------------ -----------------------
attendancebd | postgres | UTF8 | en_US.utf8 | en_US.utf8 |
postgres | postgres | UTF8 | en_US.utf8 | en_US.utf8 |
template0 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres
| | | | | postgres=CTc/postgres
(4 rows)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/431613.html
標籤:PostgreSQL 码头工人 表示 联网
