Получение порта 8080 уже использовало ошибку от docker-compose - PullRequest
0 голосов
/ 03 октября 2019

У меня есть 4 микросервиса Spring Boot, которые я пытаюсь запустить с помощью docker-compose. Когда я запускаю их с docker-compose up, я получаю сообщение о том, что порт 8080 уже используется:

product_1            | APPLICATION FAILED TO START
product_1            | ***************************
product_1            | 
product_1            | Description:
product_1            | 
product_1            | Web server failed to start. Port 8080 was already in use.
product_1            | 
product_1            | Action:
product_1            | 
product_1            | Identify and stop the process that's listening on port 8080 or configure this application to listen on another port.

Я знаю, что Dockerfiles и docker-compose.yml верны, потому что я скопировал их израбочая версия кода. Все мои Docker-файлы выглядят так:

FROM openjdk:12.0.2

EXPOSE 8080

ADD ./target/*.jar app.jar

ENTRYPOINT ["java","-jar","/app.jar"]

Вот docker-compose.yml:

version: '2.1'

services:
  product:
    build: microservices/product-service
    mem_limit: 350m
    environment:
      - SPRING_PROFILES_ACTIVE=docker
    depends_on:
      - mongodb

  recommendation:
    build: microservices/recommendation-service
    mem_limit: 350m
    environment:
      - SPRING_PROFILES_ACTIVE=docker
    depends_on:
      - mongodb

  review:
    build: microservices/review-service
    mem_limit: 350m
    environment:
      - SPRING_PROFILES_ACTIVE=docker
    depends_on:
      mysql:
        condition: service_healthy

  product-composite:
    build: microservices/product-composite-service
    mem_limit: 350m
    ports:
      - "8080:8080"
    environment:
      - SPRING_PROFILES_ACTIVE=docker

  # $ mongo
  mongodb:
    image: mongo:3.6.9
    mem_limit: 350m
    ports:
      - "27017:27017"
    command: mongod --smallfiles

  # $ mysql -uroot -h127.0.0.1 -p
  mysql:
    image: mysql:5.7
    mem_limit: 350m
    ports:
      - "3306:3306"
    environment:
      - MYSQL_ROOT_PASSWORD=rootpwd
      - MYSQL_DATABASE=review-db
      - MYSQL_USER=user
      - MYSQL_PASSWORD=pwd
    healthcheck:
      test: ["CMD", "mysqladmin" ,"ping", "-uuser", "-ppwd", "-h", "localhost"]
      interval: 10s
      timeout: 5s
      retries: 10

Все службы работают на server.port 8080.

Iпроверил и перед запуском docker-compose up на порте 8080 ничего не работает.

Этот пример взят из новой книги Практические микросервисы с Spring Boot и Spring Cloud от Магнуса Ларссона. Его пример кода работает, и я скопировал Dockerfiles и docker-compose.yml из его кода, поэтому они должны быть правильными. Это мой код, который я написал, читая книгу, с этой проблемой, но все файлы application.yml, Dockerfile и docker-compose.yml совпадают с рабочим кодом.

Где я долженискать причину этой проблемы?

Обновление: Я закомментировал все другие сервисы, кроме product-service и mongodb. Docker compose пытается запустить продукт-сервис дважды:

product_1  | 2019-10-03 12:59:26.280  INFO 1 --- [           main] e.e.m.c.p.ProductServiceApplication      : Starting ProductServiceApplication v1.0.0-SNAPSHOT on 902ca18da442 with PID 1 (/app.jar started by root in /)

product_1  | 2019-10-03 12:59:29.397  INFO 1 --- [           main] e.e.m.c.p.ProductServiceApplication      : Starting ProductServiceApplication v1.0.0-SNAPSHOT on 902ca18da442 with PID 1 (/app.jar started by root in /)

Я убедился, что этого не происходит с другими сервисами, поэтому теперь возникает вопрос: почему Docker-compose пытается запустить продукт? обслуживание дважды.

Ответы [ 2 ]

2 голосов
/ 03 октября 2019

Оказывается, моя проблема заключалась в том, что мой продукт-сервис дважды вызывал SpringApplication.run (). Так что это не было связано с docker-compose. Я оставлю этот пост на случай, если кто-нибудь еще столкнется с этим.

1 голос
/ 03 октября 2019

используйте командную строку

netstat -ano | findstr 8080 - для поиска PID для службы, которая использовала порт
ts kill "PID" - для уничтожения службы (не используйте тег кавычки)


, затем попробуйте перезапустить его. надеюсь, это поможет вам

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...