代码之家  ›  专栏  ›  技术社区  ›  LunaticJape

docker compose无法访问数据库端口

  •  1
  • LunaticJape  · 技术社区  · 8 年前

    dockerfile:

    FROM anapsix/alpine-java:8_server-jre_unlimited
    # copy application
    COPY server.jar /opt/test/
    COPY application.yml /opt/test/
    
    # expose server ports
    EXPOSE 8080 18080
    
    # Run via dumb-init
    WORKDIR /opt/test
    ENTRYPOINT ["java"]
    CMD ["-jar", "server.jar"]
    

    docker撰写文件:

    services:
      backend-server:
        image: test.com/server:latest
        build: .
        depends_on:
          - database-server
        ports:
            - "127.0.0.1:8080:8080"
            - "127.0.0.1:18080:18080"
      database-server:
        image: postgres:9.6
        ports:
            - "127.0.0.1:5432:5432"
        environment:
          - POSTGRES_PASSWORD testtest
    

    应用程序属性文件:

    spring:
      datasource:
        # use default user/database created by PostgreSQL Docker image upon startup
        url: jdbc:postgresql://localhost/postgres
        username: postgres
        password: testtest
        driver-class-name: org.postgresql.Driver
    

    当我运行docker compose up时,它将创建一个数据库容器和一个连接到数据库容器的应用程序容器。

    但是spring应用程序容器在启动过程中遇到了一些错误:

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

    docker container ls 显示数据库正在运行,如果直接运行spring应用程序,我可以访问它。

    a295bfd16e2c        postgres:9.6        "docker-entrypoint.s…"   About a minute ago   Up About a minute   127.0.0.1:5432->5432/tcp   server_database-server_1
    

    那么我搞砸了什么问题呢?

    我找到的解决方案

    services:
      backend-server:
        image: test.com/server:latest
        build: .
        environment:
          - SPRING_DATASOURCE_URL=jdbc:postgresql://database-server/postgres
        depends_on:
          - database-server
        ports:
            - 8080:8080
            - 18080:18080
      database-server:
        image: postgres:9.6
        ports:
            - 5432:5432
        environment:
          - POSTGRES_PASSWORD testtest
    

    但我仍然无法从中访问应用程序 localhost:8080 我的电脑,甚至容器的日志上都写着

    2018-10-31 15:02:40.881信息1---[main] o、 s.b.w.嵌入式。公猫TomcatWebServer:Tomcat已在端口上启动: 8080(http),上下文路径为“”

    2018-10-31 15:02:40.881信息1---[main] 通用域名格式。测验服务器申请:于年开始申请 12.823秒(JVM运行13.235秒)

    2 回复  |  直到 8 年前
        1
  •  0
  •   Shiju    8 年前

    我建议修改你的docker作文。yml文件如下所示,并对其进行测试

    services:
    
    
    backend-server:
        image: test.com/server:latest
        build: .
        depends_on:
          - database-server
        ports:
            - 8080:8080
            - 18080:18080
      database-server:
        image: postgres:9.6
        ports:
            - 5432:5432
        environment:
          - POSTGRES_PASSWORD testtest
    
        2
  •  0
  •   YonzLeon    8 年前
    services:
      backend-server:
        image: test.com/server:latest
        build: .
        depends_on:
          - database-server
        ports:
            - "127.0.0.1:8080:8080" #change to 8080:8080 without ""and by default set to local so you dont need add local ip
            - "127.0.0.1:18080:18080"  #change to 18080:18080 without ""and by default set to local so you dont need add local ip
      database-server:
        image: postgres:9.6
        ports:
            - "127.0.0.1:5432:5432" #change to 5432:5432 without ""and by default set to local so you dont need add local ip
        environment:
          - POSTGRES_PASSWORD testtest
    
    推荐文章