У меня есть 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 пытается запустить продукт? обслуживание дважды.