Postgresql docker compose:spring引导web服务访问postgres db服务

Postgresql docker compose:spring引导web服务访问postgres db服务,postgresql,spring-boot,docker-compose,Postgresql,Spring Boot,Docker Compose,在我的docker-compose.yal文件中,我定义了一个基于spring引导的web服务和一个postgresql数据库服务。web服务引用db服务,并具有数据库数据源URL的环境变量,需要在其中引用数据库服务的主机名。这就是它看起来的样子: version: '3' services: web: container_name: medmap-server hostname: medmap-server build: ../../../build/docker

在我的docker-compose.yal文件中,我定义了一个基于spring引导的web服务和一个postgresql数据库服务。web服务引用db服务,并具有数据库数据源URL的环境变量,需要在其中引用数据库服务的主机名。这就是它看起来的样子:

version: '3'
services:

  web:
    container_name: medmap-server
    hostname: medmap-server
    build: ../../../build/docker
    ports: ["8090:8090"]
    links:
      - db:database
    environment:
      - spring.datasource.url=jdbc:postgresql://medmap-db:5433/medmapdb
      - spring.datasource.username=docker
      - spring.datasource.password=docker      
      - logging.level.org.hibernate=DEBUG

  db:
    container_name: medmap-db
    hostname: medmap-db
    image: postgres:9.6.2
    ports:
      - "5433:5433"
    volumes:
      - /var/lib/medmap/data
    environment:
      - POSTGRES_PASSWORD=docker
      - POSTGRES_USER=docker
      - POSTGRES_DB=medmapdb
      - PGDATA=/var/lib/medmap/data/pgdata
当我使用
docker compose up
启动此应用程序时,出现以下错误:

medmap-server | Caused by: org.postgresql.util.PSQLException: Connection to medmap-db:5433 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections
.
medmap-server |         at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:239) ~[postgresql-9.4-1200-jdbc41.jar!/:9.4]
medmap-server |         at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:66) ~[postgresql-9.4-1200-jdbc41.jar!/:9.4]
medmap-server |         at org.postgresql.jdbc2.AbstractJdbc2Connection.<init>(AbstractJdbc2Connection.java:127) ~[postgresql-9.4-1200-jdbc41.jar!/:9.4]
medmap-server |         at org.postgresql.jdbc3.AbstractJdbc3Connection.<init>(AbstractJdbc3Connection.java:29) ~[postgresql-9.4-1200-jdbc41.jar!/:9.4]
medmap-server |         at org.postgresql.jdbc3g.AbstractJdbc3gConnection.<init>(AbstractJdbc3gConnection.java:21) ~[postgresql-9.4-1200-jdbc41.jar!/:9.4]
medmap-server |         at org.postgresql.jdbc4.AbstractJdbc4Connection.<init>(AbstractJdbc4Connection.java:41) ~[postgresql-9.4-1200-jdbc41.jar!/:9.4]
medmap-server |         at org.postgresql.jdbc4.Jdbc4Connection.<init>(Jdbc4Connection.java:24) ~[postgresql-9.4-1200-jdbc41.jar!/:9.4]
medmap-server |         at org.postgresql.Driver.makeConnection(Driver.java:414) ~[postgresql-9.4-1200-jdbc41.jar!/:9.4]
medmap-server |         at org.postgresql.Driver.connect(Driver.java:282) ~[postgresql-9.4-1200-jdbc41.jar!/:9.4]
medmap-server |         at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:310) ~[tomcat-jdbc-8.5.11.jar!/:na]
medmap-server |         at org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:203) ~[tomcat-jdbc-8.5.11.jar!/:na]
medmap-server |         at org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:732) ~[tomcat-jdbc-8.5.11.jar!/:na]
medmap-server |         at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:664) ~[tomcat-jdbc-8.5.11.jar!/:na]
medmap-server |         at org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:479) ~[tomcat-jdbc-8.5.11.jar!/:na]
medmap-server |         at org.apache.tomcat.jdbc.pool.ConnectionPool.<init>(ConnectionPool.java:154) ~[tomcat-jdbc-8.5.11.jar!/:na]
medmap-server |         at org.apache.tomcat.jdbc.pool.DataSourceProxy.pCreatePool(DataSourceProxy.java:118) ~[tomcat-jdbc-8.5.11.jar!/:na]
medmap-server |         at org.apache.tomcat.jdbc.pool.DataSourceProxy.createPool(DataSourceProxy.java:107) ~[tomcat-jdbc-8.5.11.jar!/:na]
medmap-server |         at org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java:131) ~[tomcat-jdbc-8.5.11.jar!/:na]
medmap-server |         at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) ~[hibernate-core-5.0.12.Final.jar!/:
5.0.12.Final]
medmap-server |         at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:180) ~[hibernate-core-5
.0.12.Final.jar!/:5.0.12.Final]
medmap-server |         at org.hibernate.tool.schema.extract.internal.ExtractionContextImpl.getJdbcConnection(ExtractionContextImpl.java:62) ~[hibernate-core-5.0.12.Final.jar!/:5.0.12.Final]
medmap-server |         ... 38 common frames omitted
medmap-server | Caused by: java.net.ConnectException: Connection refused (Connection refused)
medmap-server |         at java.net.PlainSocketImpl.socketConnect(Native Method) ~[na:1.8.0_121]
medmap-server |         at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) ~[na:1.8.0_121]
medmap-server |         at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) ~[na:1.8.0_121]
medmap-server |         at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) ~[na:1.8.0_121]
medmap-server |         at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[na:1.8.0_121]
medmap-server |         at java.net.Socket.connect(Socket.java:589) ~[na:1.8.0_121]
medmap-server |         at org.postgresql.core.PGStream.<init>(PGStream.java:61) ~[postgresql-9.4-1200-jdbc41.jar!/:9.4]
medmap-server |         at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:121) ~[postgresql-9.4-1200-jdbc41.jar!/:9.4]
medmap-server |         ... 58 common frames omitted
medmap-server |
medmap-server exited with code 1
medmap服务器|原因:org.postgresql.util.PSQLException:与medmap db的连接被拒绝。检查主机名和端口是否正确,邮政局长是否正在接受TCP/IP连接
.
medmap服务器|位于org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:239)~[postgresql-9.4-1200-jdbc41.jar!/:9.4]
medmap服务器|位于org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:66)~[postgresql-9.4-1200-jdbc41.jar!/:9.4]
medmap服务器|位于org.postgresql.jdbc2.AbstractJdbc2Connection.(AbstractJdbc2Connection.java:127)~[postgresql-9.4-1200-jdbc41.jar!/:9.4]
medmap服务器|位于org.postgresql.jdbc3.AbstractJdbc3Connection.(AbstractJdbc3Connection.java:29)~[postgresql-9.4-1200-jdbc41.jar!/:9.4]
medmap服务器|位于org.postgresql.jdbc3g.AbstractJdbc3gConnection.(AbstractJdbc3gConnection.java:21)~[postgresql-9.4-1200-jdbc41.jar!/:9.4]
medmap服务器|位于org.postgresql.jdbc4.AbstractJdbc4Connection.(AbstractJdbc4Connection.java:41)~[postgresql-9.4-1200-jdbc41.jar!/:9.4]
medmap服务器|位于org.postgresql.jdbc4.Jdbc4Connection.(Jdbc4Connection.java:24)~[postgresql-9.4-1200-jdbc41.jar!/:9.4]
medmap服务器|位于org.postgresql.Driver.makeConnection(Driver.java:414)~[postgresql-9.4-1200-jdbc41.jar!/:9.4]
medmap服务器|位于org.postgresql.Driver.connect(Driver.java:282)~[postgresql-9.4-1200-jdbc41.jar!/:9.4]
medmap服务器|位于org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:310)~[tomcat-jdbc-8.5.11.jar!/:na]
medmap服务器|位于org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:203)~[tomcat-jdbc-8.5.11.jar!/:na]
medmap服务器|位于org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:732)~[tomcat-jdbc-8.5.11.jar!/:na]
medmap服务器|位于org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:664)~[tomcat-jdbc-8.5.11.jar!/:na]
medmap服务器|位于org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:479)~[tomcat-jdbc-8.5.11.jar!/:na]
medmap服务器|位于org.apache.tomcat.jdbc.pool.ConnectionPool.(ConnectionPool.java:154)~[tomcat-jdbc-8.5.11.jar!/:na]
medmap服务器|位于org.apache.tomcat.jdbc.pool.DataSourceProxy.pCreatePool(DataSourceProxy.java:118)~[tomcat-jdbc-8.5.11.jar!/:na]
medmap服务器|位于org.apache.tomcat.jdbc.pool.DataSourceProxy.createPool(DataSourceProxy.java:107)~[tomcat-jdbc-8.5.11.jar!/:na]
medmap服务器|位于org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java:131)~[tomcat-jdbc-8.5.11.jar!/:na]
medmap服务器|位于org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122)~[hibernate-core-5.0.12.Final.jar!/:
5.0.12.最终版本]
medmap服务器|位于org.hibernate.engine.jdbc.env.internal.jdbc环境启动器$connectionProviderjdbc连接Access.获得连接(jdbc环境启动器.java:180)~[hibernate-core-5
.0.12.Final.jar!/:5.0.12.Final]
medmap服务器|位于org.hibernate.tool.schema.extract.internal.ExtractionContextImpl.getJdbcConnection(ExtractionContextImpl.java:62)~[hibernate-core-5.0.12.Final.jar!/:5.0.12.Final]
medmap服务器|。。。省略38个公共帧
medmap服务器|原因:java.net.ConnectException:连接被拒绝(连接被拒绝)
medmap服务器|位于java.net.PlainSocketImpl.socketConnect(本机方法)~[na:1.8.0_121]
medmap服务器|位于java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)~[na:1.8.0_121]
medmap服务器|位于java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)~[na:1.8.0_121]
medmap服务器|位于java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)~[na:1.8.0_121]
medmap服务器|位于java.net.socksocketimpl.connect(socksocketimpl.java:392)~[na:1.8.0_121]
medmap服务器|位于java.net.Socket.connect(Socket.java:589)~[na:1.8.0_121]
medmap服务器|位于org.postgresql.core.PGStream.(PGStream.java:61)~[postgresql-9.4-1200-jdbc41.jar!/:9.4]
medmap服务器|位于org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:121)~[postgresql-9.4-1200-jdbc41.jar!/:9.4]
medmap服务器|。。。省略58个公共帧
医学地图服务器|
medmap服务器已退出,代码为1
我不知道如何创建pg_hba.conf文件,以允许一个容器中的web服务访问另一个容器中的db服务。TIA需要任何帮助

请尝试定义它,而不是5433

端口(整数)服务器侦听的TCP端口;默认情况下为5432。 请注意,服务器上的所有IP地址都使用相同的端口号 倾听。此参数只能在服务器启动时设置


感谢@vao tsun建议我参观postgres港

我通过在db服务的conatiner上启动bash shell,查看了我的db服务中postgres使用的端口:

docker exec-i-t medmap db/bin/bash

然后在bash shell中执行以下psql命令:

psql-U postgres-c“从pg_设置中选择*,其中name='port';”

这表明我使用的是端口5432,而不是5423,这是我的web服务在由指定的IDBC URL中使用的端口
version: '3'
services:

  web:
    container_name: medmap-server
    hostname: medmap-server
    build: ../../../build/docker
    ports: ["8090:8090"]
    links:
      - db:database
    environment:
      - server.port=8090
      - spring.datasource.url=jdbc:postgresql://medmap-db:5433/medmapdb
      - spring.datasource.username=postgres
      - spring.datasource.password=postgres      
#      - logging.level.org.hibernate=DEBUG

  db:
    container_name: medmap-db
    hostname: medmap-db
    image: postgres:9.6.2
    ports:
      - "5433:5433"
    volumes:
      - /var/lib/medmap/data
    environment:
      - POSTGRES_PASSWORD=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_DB=medmapdb
      - PGDATA=/var/lib/medmap/data/pgdata
      - PGPORT=5433