如何为 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 容器并可以正常使用。