【发布时间】:2021-08-21 06:25:40
【问题描述】:
我有一个包含多个 postgresql 数据库的 docker 容器:
version: "3.7"
services:
nginx:
image: nginx:1.18.0-alpine
ports:
- 8028:80
volumes:
- ./nginx/localhost/conf.d:/etc/nginx/conf.d
depends_on:
- webapp
networks:
- postgresql_network
postgresql:
image: "postgres:13-alpine"
restart: always
volumes:
- type: bind
source: ../DO_NOT_DELETE_POSTGRESQL_DATA
target: /var/lib/postgresql/data
environment:
POSTGRES_DB: db1
POSTGRES_USER: simha
POSTGRES_PASSWORD: krishna
PGDATA: "/var/lib/postgresql/data/pgdata"
networks:
- postgresql_network
postgresql2:
image: "postgres:13-alpine"
restart: always
volumes:
- type: bind
source: ../DO_NOT_DELETE_POSTGRESQL_DATA2
target: /var/lib/postgresql/data
environment:
POSTGRES_DB: db2
POSTGRES_USER: simha
POSTGRES_PASSWORD: krishna
PGDATA: "/var/lib/postgresql/data/pgdata"
networks:
- postgresql_network
networks:
postgresql_network:
driver: bridge
现在我可以为每个 postgresq 实例公开两个不同的端口,并以不同的方式从主机访问它们(如 localhost 5432 和 localhost 5445)
但我想使用不同的域名来处理它们。
喜欢pg1.docker.db,端口8028(nginx 端口)和pg.docker.db,端口8028(nginx 端口),并使用nginx 在内部使用postgresql 和postgresql2 将它们反向代理到不同的docker 容器
在主机/etc/hosts我会有
127.0.0.1 pg1.docker.db
127.0.0.1 pg2.docker.db
我不确定,但类似的东西。有人能说我做得对吗
## WEBSERVER
upstream webapp {
server webapp:8000;
}
server {
listen 80;
location / {
proxy_pass http://webapp;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
}
}
## POSTGRESQL DBS
upstream postgres {
server postgresql:5432;
}
upstream postgres2 {
server postgresql2:5432;
}
server {
listen 80 so_keepalive=on;
server_name db1.domain.my;
proxy_pass postgres;
}
server {
listen 80 so_keepalive=on;
server_name db2.domain.my;
proxy_pass postgres2;
}
我发现有人使用stream 和http。以上是否也有效。或者我应该做点什么
【问题讨论】:
-
您必须制定自己的协议并为此创建切换器进程。 PostgreSQL 协议对此没有概念,我假设 Nginx 在这里只是一个 TCP 代理
标签: postgresql docker nginx