我使用docker-compose跨多个docker容器工作,所有这些容器大多是单独的django rest框架构建的应用程序。我已经下载了所有容器,并且能够使用所有这些容器构建整个应用程序。
每个容器都有postgres db运行,我想现在使用任何ui工具浏览数据库。我知道pgadmin可以在这里完成工作,但我如何配置我的pgadmin来展示这些容器中的任何postgres数据库?
答案 0 :(得分:0)
应该可以将数据库端口也暴露给本地网络。
通常,您将应用程序容器内部连接到数据库容器。在这种情况下,不需要在数据库的compose文件中声明ports部分,但如果您有该条目,则除了本地主机之外还绑定数据库。
在您将postgres端口暴露给主机端口后,连接您选择的gui工具应该没问题。
version: '3.2'
services:
httpd:
image: "oth/d_apache2.4:0.2"
ports:
# container port 80 of the webserver to localhost 80
- "80:80"
keycloak:
# keycloak uses keycloak_db
image: "jboss/keycloak-postgres:3.2.1.Final"
environment:
# internal network reference to db container
- POSTGRES_PORT_5432_TCP_ADDR=keycloak_db
- POSTGRES_PORT_5432_TCP_PORT=5432
keycloak_db:
environment:
image: "postgres:alpine"
ports:
# container port 5432 to localhost 5432
# stack intern is the port still available
- "5432:5432"
答案 1 :(得分:0)
确保postgres
容器的端口映射到主机系统。默认postgres
端口为5432
。您可以使用docker-compose.yml
中的port directive执行此操作。您只能映射一次端口。所以你的配置文件看起来像:
services:
postgres_1:
ports:
- "49000:54321"
[...]
postgres_2:
ports:
- "49001:54321"
[...]
之后,您应该能够使用docker
主机的IP和上面指定的端口访问所需的数据库。
如果您仍然遇到与pgadmin
等客户端连接时出现问题,请检查容器内的以下配置文件。
docker
主机是否在防火墙后面? postgresql.conf
在connections and authentication部分下:
listen_addresses
port
检查pg_hba.conf
, which controls client authentication。
出于调试目的,您可以将其设置为以下内容:
不要在制作中执行以下操作:
host all all all trust