【问题标题】:Docker-compose can't connect to Docker postgres containerDocker-compose 无法连接到 Docker postgres 容器
【发布时间】:2020-09-27 11:41:41
【问题描述】:

我的 Postgres 数据库在 Docker 容器中运行。当容器启动时,它说它已准备好在 5432 上侦听。 我的应用程序容器设置为依赖它。

    container_name: my_postgres_db
    image: library/postgres:latest
    network_mode: bridge
    expose:
      - 5432
    ports:
      - 5432:5432
    environment:
      - POSTGRES_USER=admin
      - POSTGRES_PASSWORD=admin
      - POSTGRES_DB=localdb
    restart: always

应用的配置:

    container_name: my_test_app
    depends_on:
      - db
    build:
      context: ./
      dockerfile: Dockerfile
    image: my_test_app
    ports:
      - 8080:8080

基于类似问题的解决方案,我将 DB URL 中的localhost 更改为: spring.datasource.url=jdbc:postgresql://db:5432/localdb

它会导致另一个错误 =“未知主机异常”。即使我设法以这种方式构建应用程序,它仍然无法正常工作。日志说, Connection to localhost:5432 refused 我还缺少什么? 为什么我明明把localhost:5432改成db:5432然后gradlew clean/build它还在听?

【问题讨论】:

标签: postgresql spring-boot docker docker-compose


【解决方案1】:

只需将 postgres 和应用程序中的 network_mode 更改为 host

network_mode: host

请注意,这将忽略暴露选项,并将使用主机网络和容器网络

【讨论】:

  • 非常感谢!它成功了。我将 docker-compose.yml 中的 'app' 和 'db' network_mode 都设置为主机。我将您的答案标记为解决方案。