【发布时间】:2021-08-26 21:17:04
【问题描述】:
我有一个简单的 Spring Boot 应用程序,它使用的其他依赖项/服务很少。这是一个学生演示项目,所以没什么大不了的,我只是在测试一些东西,因此我是 Docker 新手。
首先,我的应用程序使用三种不同的服务:MySQL、RabbitMq(向其他 Spring 应用发送一些虚拟消息)、Liquibase 用于初始化表和插入数据。
在mvn clean 和mvn install 之后应用程序构建良好。但目标是使用 Docker compose 从 cmd 启动它。这是我在 Docker 的第二天。
Dockerfile 的外观如下:
FROM openjdk:8
ADD target/Consumer-0.0.1-SNAPSHOT.jar Consumer-0.0.1-SNAPSHOT.jar
EXPOSE 8085
ENTRYPOINT ["java", "-jar", "Consumer-0.0.1-SNAPSHOT.jar"]
这里是docker-compose.yml:
version: '3'
services:
#service 1: definition of mysql database
db:
image: mysql:latest
container_name: mysql-db2
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_USER=root
ports:
- 3306:3306
restart: always
rabbitmq:
image: rabbitmq:management
ports:
- 5672:5672
- 15672:15672
liquibase:
build: .
image: ubuntu-jdk8-liquibase:latest
depends_on:
- db
network_mode: "host"
#service 3: definition of your spring-boot app
consumerservice: #it is just a name, which will be used only in this file.
image: consumer-image #name of the image after dockerfile executes
container_name: consumer-container #name of the container created from docker image
build:
context: . #docker file path (. means root directory)
dockerfile: Dockerfile #docker file name
ports:
- 8085:8085 #docker containter port with your os port
restart: always
depends_on: #define dependencies of this app
- db
- rabbitmq #dependency name (which is defined with this name 'db' in this file earlier)
environment:
SPRING_DATASOURCE_URL: jdbc:mysql://mysql-db:3306/consumer?createDatabaseIfNotExist=true
SPRING_DATASOURCE_USERNAME: root
SPRING_DATASOURCE_PASSWORD: root
cd 进入项目目录后运行docker-compose ps:
我的问题是,我缺少什么,我需要向Dockerfile 添加更多内容吗? .yml 中的语法是否正确?我正在运行 Windows 并安装了 Docker Desktop。
更新 1
执行命令docker-compose up 后,我注意到它开始下载 liquibase 和 mysql 的图像(花了几分钟)。之后我得到了一个错误。
Removing mysql-db2
Recreating f7bf19092bb4_mysql-db2 ...
Recreating f7bf19092bb4_mysql-db2 ... error
ERROR: for f7bf19092bb4_mysql-db2 Cannot start service db: Ports are not available: listen tcp 0.0.0.0:3306: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted.
ERROR: for db Cannot start service db: Ports are not available: listen tcp 0.0.0.0:3306: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted.
ERROR: Encountered errors while bringing up the project.
即使在我将ports 部分设置为3306:3307 和3307:3307 并设置 SPRING_DATASOURCE_URL: jdbc:mysql://mysql-db:3307/consumer?createDatabaseIfNotExist=true 之后,我仍然会收到同样的错误
【问题讨论】:
-
能否检查一下docker服务是否启动并运行?
-
我刚刚更新了问题
-
@Ashok 我运行了 docker-info,但如果服务已启动,我不知道在哪里寻找
-
如果您在运行 docker 命令时可以看到输出,则表示 docker 服务正在运行
标签: spring-boot docker maven docker-compose dockerfile