如何为Java Spring Boot和MySql设置Docker容器

问题描述 投票:0回答:3

我无法让运行Java Spring Boot Api层的Docker容器与运行MySql数据库的Docker容器进行通信。

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 Boot应用程序构建了Docker镜像,如下所示:

./gradlew build docker -x test

3)我为Java Spring Boot应用程序创建了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)我的Dockerfile看起来像这样

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)我的application-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

我收到一条错误,指出该网站拒绝连接,只显示默认的浏览器错误页面。请告诉我我做错了什么。谢谢。

java mysql spring docker connect
3个回答
1
投票

创建一个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

寻找公共IP然后连接到它


0
投票

将两个应用程序放入docker compose并通过其docker名称相互引用。


0
投票

我刚注意到一个错字。而不是DATABASE_PORT = 3306,我使用冒号。通过此更正,Java Spring Boot容器现在与MySql容器链接并正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.