我已经设置了一个 postgres 数据库容器,并且可以使用其发布的端口 5434 直接连接和查询它。
目标是稍后部署测试数据库并通过 nginx 反向代理访问它。我不知道连接到已部署的测试数据库的最佳方法是什么。请指教。
我尝试使用本地容器通过 nginx 反向代理连接到 postgres 数据库。
使用命令:
psql -h localhost -p 5435 -U postgres database_name_container_test
Nginx 显示错误:
reverse-proxy | 2021/10/29 20:06:57 [info] 32#32: *17 client 172.25.0.1:56630 connected to 0.0.0.0:5435
reverse-proxy | 2021/10/29 20:06:57 [error] 32#32: *17 connect() failed (111: Connection refused) while connecting to upstream, client: 172.25.0.1, server:
0.0.0.0:5435, upstream: "172.25.0.3:5434", bytes from/to client:0/0, bytes from/to upstream:0/0
nginx.conf:
stream {
upstream database_test {
server postgres_test:5434;
}
server {
listen 5435 so_keepalive=on;
proxy_pass database_test;
}
}
test_db docker-compose:
services:
postgres_test:
container_name: postgres_test
image: postgis/postgis
restart: always
expose:
- 5432
ports:
- 5434:5432
volumes:
- ./backup:/backup
- ./postgres-init-db.sh:/docker-entrypoint-initdb.d/postgres-init-db.sh
- postgres_test_data:/var/lib/postgresql/data
env_file:
- ./.env.postgres
networks:
- common-network
volumes:
postgres_test_data:
networks:
common-network:
external:
name: common-network
反向代理docker-compose:
networks:
common-network: #name in this docker-compose file
name: common-network # the actual name of the network
services:
nginx:
image: nginx:1.20.1
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
ports:
- 80:80
- 443:443
- 5435:5435
container_name: reverse-proxy
networks:
- common-network
另外我检查了 postgres 配置文件,它们似乎是正确的:
cat postgresql.conf | grep listen_addresses
listen_addresses = '*'
cat pg_hba.conf | grep host
host all all all md5
答案1
当通过名称连接到 Docker 容器时,您应该使用服务的公开端口,即5432
,因为您直接连接到客户机:
server postgres_test:5432;
另一方面,已发布的端口5434
出现在主机上,因此您也应该能够通过这种方式访问服务:
server localhost:5434;
我不推荐这样做,因为您需要考虑未来管理的端口映射(而不仅仅是知道容器名称和标准暴露端口)。