Spring 已指定服务名称而不是localhost后,通过Docker Compose拒绝连接到localhost:5432

Spring 已指定服务名称而不是localhost后,通过Docker Compose拒绝连接到localhost:5432,spring,docker,docker-compose,Spring,Docker,Docker Compose,我有一些微服务在Docker下运行。它们是Zuul、Eureka和配置服务器。这些都在工作,但当我启动我的授权服务时,它说我无法连接到PostgreSQL version: '3' services: eureka-discovery: ... zuul-gateway: ... config: ... postgres: image: postgres environment: POSTGRES_USER: postgres

我有一些微服务在Docker下运行。它们是Zuul、Eureka和配置服务器。这些都在工作,但当我启动我的
授权服务时,它说我无法连接到PostgreSQL

version: '3'
services:
  eureka-discovery:
    ...
  zuul-gateway:
    ...
  config:
    ...
  postgres:
    image: postgres
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: root
      POSTGRES_DB: spring_microservices
    ports:
      - 5432:5432
  authorization-service:
    image: authorization-service:0.0.1
    environment:
      - eureka.client.serviceUrl.defaultZone=http://eureka-discovery:8761/eureka
      - spring.cloud.config.uri=http://zuul-gateway:8765/config-service
      - spring.datasource.url=jdbc:postgresql://postgres:5432/spring_microservices
    depends_on:
      - eureka-discovery
      - zuul-gateway
      - config
      - postgres
    ports:
      - 1001:1001
令人困惑的是,我指定了
postgres
而不是localhost来建立连接,但错误仍然是“localhost”。您可以看到,我重写其他属性的方式与我对
spring.datasource.url
所做的相同,它们只在这个属性上起作用

org.postgresql.util.PSQLException:与本地主机的连接被拒绝:5432。检查主机名和端口是否正确,邮政局长是否接受TCP/IP连接


我尝试了一些我可以找到的变体,例如使用不同的服务名称,使用
SPRING\u DATASOURCE\u URL
,使用连接字符串作为
postgresql://[user]:[pass]@[service]/[database]
,我尝试将这一行移到
配置服务
,因为数据库连接确实在SpringCloudConfigServerMicroService中,但都没有用。少了什么?与我找到的所有解决方案相比,这似乎是正确的。

嗨,我希望你没事


在授权服务上方添加如下链接:

links: 
  - "postgres"

问候语

我让Spring Config Server查看我的存储库中的配置。更好地考虑一下,如果它从存储库中读取数据,很明显在本地动态更改它是不起作用的,因此我更新了
授权服务的配置文件的连接字符串,然后按下按钮,它就起作用了。我想知道这是一种好的做法还是更好的做法,可以让Config Server看到本地文件并动态更改它?

您可以显示
application.yml
文件吗?如果您试图从容器内部连接到localhost,您需要使用
host.docker.internal
。在这里阅读更多@NullPointerException,我不认为是这样。它是一个连接到数据库的外部容器,就像config和eureka一样。嗨,问题是我没有放“localhost”。正如您在
docker compose yml
文件中看到的,我输入了服务的名称,并且尝试了容器的名称而不是localhost,但是错误仍然是“localhost:5432”。尝试输入您的PostgreSql的链接我不知道您的意思。在授权服务上方添加一个链接,如下所示:links:-“postgres”