我无法让运行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
我收到一条错误,指出该网站拒绝连接,只显示默认的浏览器错误页面。请告诉我我做错了什么。谢谢。
创建一个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然后连接到它
将两个应用程序放入docker compose并通过其docker名称相互引用。
我刚注意到一个错字。而不是DATABASE_PORT = 3306,我使用冒号。通过此更正,Java Spring Boot容器现在与MySql容器链接并正常工作。