如何为 Java Spring Boot 和 MySql 设置 Docker 容器
How to set up Docker containers for Java Spring Boot and MySql
我无法让我的 Docker 容器 运行 Java Spring 启动 Api 层与我的 Docker 容器通信 运行 一个 MySql 数据库。
1) 我创建了 MySql 图像如下:
docker run -d
--name aname-mysql
-e MYSQL_ROOT_PASSWORD=root
-e MYSQL_DATABASE=db
-e MYSQL_USER=root
-e MYSQL_PASSWORD=root
mysql:5.7
2) 我为 Java Spring 引导应用程序构建了 Docker 映像,如下所示:
./gradlew build docker -x test
3) 我为 Java Spring 引导应用程序创建了 Docker 容器,如下所示:
docker run -d
-p 8080:8080 --name app-api
--link aname-mysql:mysql
-e DATABASE_HOST=aname-mysql
-e DATABASE_PORT:3306
-e DATABASE_NAME=db
-e DATABASE_USER=root
-e DATABASE_PASSWORD=root
com.app/my.api
4) 我的 Docker 文件如下所示
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE
ADD ${JAR_FILE} app.jar
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-Dspring.profiles.active=container", "-jar","/app.jar"]
5) 我的应用程序-container.yml 文件看起来像这样
server:
port: 8080
spring:
datasource:
url: jdbc:mysql://${DATABASE_HOST}:${DATABASE_PORT}/${DATABASE_NAME}?autoReconnect=true&useSSL=false
username: ${DATABASE_USER}
password: ${DATABASE_PASSWORD}
jpa:
database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
properties:
hibernate:
dialect: org.hibernate.dialect.MySQL5InnoDBDialect
hibernate:
ddl-auto: validate
show_sql: true
在运行这些命令之后输入
http://localhost:8080/api/users
我收到一条错误消息,指出该站点拒绝连接,并且只显示默认的浏览器错误页面。请告诉我我做错了什么。谢谢。
将两个应用程序放入 docker 组合中,并通过它们的 docker 名称相互引用。
创建一个 docker-compose.yaml 并放入以下内容
version: '2'
services:
database:
container_name:db
restart: always
image: mysql
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD: example
java:
image: <YOUR JAVA IMAGE>
links:
- "database"
启动服务:
docker-compose up
尝试通过 localhost:3306 从 java 连接到它
或者获取 db 容器的 ip:
docker inspect db
查找 public ip 然后连接到它
我刚注意到一个错字。我用冒号代替 DATABASE_PORT=3306。通过此更正,Java Spring 引导容器现在链接到 MySql 容器并可以正常使用。
我无法让我的 Docker 容器 运行 Java Spring 启动 Api 层与我的 Docker 容器通信 运行 一个 MySql 数据库。
1) 我创建了 MySql 图像如下:
docker run -d
--name aname-mysql
-e MYSQL_ROOT_PASSWORD=root
-e MYSQL_DATABASE=db
-e MYSQL_USER=root
-e MYSQL_PASSWORD=root
mysql:5.7
2) 我为 Java Spring 引导应用程序构建了 Docker 映像,如下所示:
./gradlew build docker -x test
3) 我为 Java Spring 引导应用程序创建了 Docker 容器,如下所示:
docker run -d
-p 8080:8080 --name app-api
--link aname-mysql:mysql
-e DATABASE_HOST=aname-mysql
-e DATABASE_PORT:3306
-e DATABASE_NAME=db
-e DATABASE_USER=root
-e DATABASE_PASSWORD=root
com.app/my.api
4) 我的 Docker 文件如下所示
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE
ADD ${JAR_FILE} app.jar
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-Dspring.profiles.active=container", "-jar","/app.jar"]
5) 我的应用程序-container.yml 文件看起来像这样
server:
port: 8080
spring:
datasource:
url: jdbc:mysql://${DATABASE_HOST}:${DATABASE_PORT}/${DATABASE_NAME}?autoReconnect=true&useSSL=false
username: ${DATABASE_USER}
password: ${DATABASE_PASSWORD}
jpa:
database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
properties:
hibernate:
dialect: org.hibernate.dialect.MySQL5InnoDBDialect
hibernate:
ddl-auto: validate
show_sql: true
在运行这些命令之后输入
http://localhost:8080/api/users
我收到一条错误消息,指出该站点拒绝连接,并且只显示默认的浏览器错误页面。请告诉我我做错了什么。谢谢。
将两个应用程序放入 docker 组合中,并通过它们的 docker 名称相互引用。
创建一个 docker-compose.yaml 并放入以下内容
version: '2'
services:
database:
container_name:db
restart: always
image: mysql
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD: example
java:
image: <YOUR JAVA IMAGE>
links:
- "database"
启动服务:
docker-compose up
尝试通过 localhost:3306 从 java 连接到它 或者获取 db 容器的 ip:
docker inspect db
查找 public ip 然后连接到它
我刚注意到一个错字。我用冒号代替 DATABASE_PORT=3306。通过此更正,Java Spring 引导容器现在链接到 MySql 容器并可以正常使用。