docker-compose не может получить доступ к порту базы данных - PullRequest
0 голосов
/ 31 октября 2018

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-compose files:

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, он создает контейнер базы данных и контейнер приложения, который подключается к контейнеру базы данных.

Но контейнер приложения Spring сталкивается с некоторой проблемой при загрузке с ошибкой:

org.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 INFO 1 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer: Tomcat запущен на портах: 8080 (http) с контекстным путем ''

2018-10-31 15: 02: 40,881 INFO 1 --- [main] com.test.server.Application: запущенное приложение в 12,823 секунды (JVM работает 13,235)

Ответы [ 2 ]

0 голосов
/ 31 октября 2018
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
0 голосов
/ 31 октября 2018

Я предлагаю изменить ваш файл docker-compose.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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...