Docker编写了一个spring服务和一个mysql服务,但init.sql不加载,Postman返回空数据
我是第一次和Docker一起工作。在我的工作中,他们要求我使用Docker编写了一个spring服务和一个mysql服务,但init.sql不加载,Postman返回空数据,mysql,spring,docker,docker-compose,dockerfile,Mysql,Spring,Docker,Docker Compose,Dockerfile,我是第一次和Docker一起工作。在我的工作中,他们要求我使用docker compose部署一个完整的应用程序,我现在正在学习 我有一个docker-compose.yml,它启动两个服务:一个用于spring,另一个用于MySQL Spring使用Dockerfile构建映像 MySQL使用的是官方的MySQL镜像 我不知道如何加载init.sql来初始化并将数据加载到MySQL容器的数据库中 我尝试使用另一个Dockerfile将init.sql复制到MySQL容器中,但是, 在创建图
docker compose
部署一个完整的应用程序,我现在正在学习
我有一个docker-compose.yml,它启动两个服务:一个用于spring,另一个用于MySQL
- Spring使用Dockerfile构建映像
- MySQL使用的是官方的MySQL镜像
init.sql
来初始化并将数据加载到MySQL容器的数据库中
我尝试使用另一个Dockerfile将init.sql复制到MySQL容器中,但是,
在创建图像或运行容器时,如何告诉compose使用它
这是针对Windows 10操作系统桌面的。Docker版本18.09.2。Docker compose版本1.23.2
Docker桌面
Docker compose.yml
version: '3.7'
services:
mysql-docker-container:
image: mysql
container_name: mysql-docker-container
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=database
- MYSQL_USER=user
- MYSQL_PASSWORD=user
ports:
- 2012:3306
tty: true
spring-jpa-app:
build:
context: .
dockerfile: Dockerfile
container_name: spring-jpa-app
links:
- mysql-docker-container:mysql-docker-container
depends_on:
- mysql-docker-container
ports:
- 8087:8080
tty: true
restart: always
docker-compose up --build
Dockerfile
FROM java:8
VOLUME /tmp
EXPOSE 8080
ADD app-1.0.0.jar app-1.0.0.jar
ENTRYPOINT ["java","-jar","app-1.0.0.jar"]
应用程序属性
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://mysql-docker-container:2012/database?autoReconnect=true&useSSL=false
spring.datasource.username=user
spring.datasource.password=user
spring.jpa.database=database
spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
logging.file=log/log.log
logging.level.org.springframework=info
logging.level.orghibernate=info
Docker桌面运行
以管理员身份打开了Git Bash
docker-machine ls
NAME ACTIVE DRIVER STATE URL DOCKER
app * hyperv Running tcp://172.18.67.35:2376 v19.03.0
在应用程序文件夹中,位于/src的位置
mvn clean install -DskipTests
BUILD SUCCESS
在应用程序文件夹中,application.properties,app.jar,docker compose.yml,Dockerfile和init.sql
version: '3.7'
services:
mysql-docker-container:
image: mysql
container_name: mysql-docker-container
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=database
- MYSQL_USER=user
- MYSQL_PASSWORD=user
ports:
- 2012:3306
tty: true
spring-jpa-app:
build:
context: .
dockerfile: Dockerfile
container_name: spring-jpa-app
links:
- mysql-docker-container:mysql-docker-container
depends_on:
- mysql-docker-container
ports:
- 8087:8080
tty: true
restart: always
docker-compose up --build
邮递员
URL=
返回空,因为未加载init.sql
PD:另外,如果我以管理员身份打开一个新的git Bash并
docker ps -a
我没有让容器运行,因此我无法知道容器的ID以进入MySQL容器。您需要添加一个卷来将sql.init复制到您的db continer:
version: '3.7'
services:
mysql-docker-container:
image: mysql
container_name: mysql-docker-container
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=database
- MYSQL_USER=user
- MYSQL_PASSWORD=user
ports:
- 2012:3306
volumes:
- /bath/to/file/on/host/init.sql:/docker-entrypoint-initdb.d/init.sql
tty: true
network_mode: "host"
spring-jpa-app:
build:
context: .
dockerfile: Dockerfile
container_name: spring-jpa-app
links:
- mysql-docker-container:mysql-docker-container
depends_on:
- mysql-docker-container
ports:
- 8087:8080
tty: true
restart: always
network_mode: "host"
请参阅并搜索“初始化新实例”
另一方面,您需要使用网络来设置容器之间的连接-请参阅上面的撰写文件-
您需要将配置更改为
spring.datasource.url=jdbc:mysql://localhost:2012/database?autoReconnect=true&useSSL=false
您需要添加一个卷以将sql.init复制到db continer:
version: '3.7'
services:
mysql-docker-container:
image: mysql
container_name: mysql-docker-container
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=database
- MYSQL_USER=user
- MYSQL_PASSWORD=user
ports:
- 2012:3306
volumes:
- /bath/to/file/on/host/init.sql:/docker-entrypoint-initdb.d/init.sql
tty: true
network_mode: "host"
spring-jpa-app:
build:
context: .
dockerfile: Dockerfile
container_name: spring-jpa-app
links:
- mysql-docker-container:mysql-docker-container
depends_on:
- mysql-docker-container
ports:
- 8087:8080
tty: true
restart: always
network_mode: "host"
请参阅并搜索“初始化新实例”
另一方面,您需要使用网络来设置容器之间的连接-请参阅上面的撰写文件-
您需要将配置更改为
spring.datasource.url=jdbc:mysql://localhost:2012/database?autoReconnect=true&useSSL=false
我尝试过你的建议,但效果相同,但在Postman中返回空,init.sql插入了许多数据,我的意思是它是正确的,问题不在于init.sqlI尝试过你的建议,但效果相同,但在Postman中返回空,init.sql插入了许多数据,我的意思是它是正确的,问题不在于init.sql