我一直在努力从本地主机和外部都连接到postgresql容器。
这是一个非常不错的演示,效果很好,如https://linuxhint.com/postgresql_docker/所示。下面是docker-compose.yml,通过它可以将postgres:12.2和pgadmin容器化并运行。并且确实在运行docker-compose.yml文件(通过docker-compose up -d)后它们可以工作。
然后,您可以在浏览器中访问http:// localhost:8080 /并具有对pgadmin的直接访问权限(具有给定的凭据,即admin@linuxhint.com, secret ),然后开始在docker上的postgres:12.2安装上进行操作。
但是,当我尝试直接从本地主机或外部/某些应用程序/ ip(例如Java Spring Boot)找到与该postgres:12.2 -database的连接时,我的困难就开始了。
诚然,我不是docker方面的专家,而只是学生-所以,我寻求帮助。希望有人可以告诉我应该怎么做才能使来自外部/应用程序的(此)容器化postgres数据库成为可能。我正在使用Win 10。
更新:

  • 谁能说说为什么一个Web应用程序(在docker.compose.yml下面添加到docker.compose.yml中,请参见下文)在启动后会持续关闭?
  • docker日志给出以下错误:
    由以下原因引起:org.springframework.beans.factory.BeanCreationException:在类路径资源[org / springframework / boot / autoconfigure / jdbc / DataSourceConfiguration $ Hikari.class]中创建名称为“dataSource”的bean时出错。嵌套的异常是org.springframework.beans.factory.BeanCreationException:创建名称为org.springframework.boot.autoconfigure.jdbc.DataSourceInitializerInvoker的bean时出错:调用init方法失败;嵌套的异常是org.springframework.jdbc.datasource.init.UncategorizedScriptException:无法执行数据库脚本;嵌套的异常是org.springframework.jdbc.CannotGetJdbcConnectionException:无法获取JDBC连接。嵌套的异常是org.postgresql.util.PSQLException:到本地主机的连接:5433被拒绝。检查主机名和端口是否正确以及邮局主管正在接受TCP / IP连接。
  • 这是应用程序的 Dockerfile :
    来自maven:3-jdk-11
    音量/ tmp
    展览8095
    添加/target/spring-boot-demo-0.0.1-SNAPSHOT.jar app.jar
    运行ls -ls
    ENTRYPOINT [“java”,“-Djava.security.egd = file:/ dev /./ urandom”,“-jar”,“/ app.jar”]
  • ,这是 application.properties 文件中的连接详细信息:
    spring.datasource.url = jdbc:postgresql:// db:5432 / postgres
    spring.datasource.username =管理员
    spring.datasource.password = secret
  • 其他两个服务(db和pgadmin正常启动)

  • docker-compose.yml
    version: "3.7"
    
    services:
    
    # ========== ADDED APP ===============
     web:
       #restart: on-failure
       image: app-springboot-postgresql
       build: ./
       ports:
         - "8095:8095"
       environment:
         WAIT_HOSTS: postgres:5432
       depends_on:
        - db
    # ========== ADDED APP ===============
    
      db:
        image: postgres:12.2
        restart: always
        environment:
          POSTGRES_DB: postgres
          POSTGRES_USER: admin
          POSTGRES_PASSWORD: secret
          PGDATA: /var/lib/postgresql/data
        volumes:
          - db-data:/var/lib/postgresql/data
        ports:
          - "5432:5432"
    
      pgadmin:
        image: dpage/pgadmin4:4.18
        restart: always
        environment:
          PGADMIN_DEFAULT_EMAIL: admin@linuxhint.com
          PGADMIN_DEFAULT_PASSWORD: secret
          PGADMIN_LISTEN_PORT: 80
        ports:
          - "8080:80"
        volumes:
          - pgadmin-data:/var/lib/pgadmin
        links:
          - "db:pgsql-server"
    
    volumes:
      db-data:
      pgadmin-data:
    

    最佳答案

    docker-compose.yml将Postgres的端口5432发布到运行docker daemon的计算机上。
    因此,假设应用程序在计算机上运行,​​则应将其作为Postgres主机连接至127.0.0.1,将其作为Postgres端口连接至5432

    09-30 15:26
    查看更多