【发布时间】:2018-09-17 16:49:48
【问题描述】:
我无法让运行 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
我收到一条错误消息,指出该站点拒绝连接并且只显示默认浏览器错误页面。请告诉我我做错了什么。谢谢。
【问题讨论】:
-
您的 mysql 容器没有暴露任何端口,因此基本上无法从外部访问。要么将端口 3306 公开为外部端口,要么创建一个 docker-compose 文件,以便两个容器共享网络,以便您可以通过容器名称引用它们,而无需从外部公开端口。
标签: java mysql spring docker connect