我通过 Docker 设置了一个 Mysql 服务器,在我的 IDE 中运行我的微服务时一切正常,我能够通过以下方式连接到我的数据库
spring.datasource.url= jdbc:mysql://docker:3079/vetdb?useSSL=false
现在我想通过 Docker 测试部署我的微服务
Docker-Compose
version: '3'
services:
vetdb:
container_name: vetdb
hostname: vetdb
image: mysql:latest
command: --default-authentication-plugin=mysql_native_password
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=vetdb
- MYSQL_PASSWORD=root
ports:
- 3079:3306
volumes:
- ./mysql-data:/var/lib/mysql
VET:
hostname: ${VET_HOSTNAME}
container_name: ${VET_HOSTNAME}
image: openjdk:8-jdk-alpine
ports:
- "${VET_PORT}:8080"
volumes:
- "/dockervolumes/microservices/VET/tmp:/tmp"
- "./jar:/jar"
entrypoint:
- "java"
- "-Djava.security.egd=file:/dev/./urandom"
- "-jar"
- "/jar/${VET_JAR_NAME}.jar"
depends_on:
- vetdb
links:
- vetdb:vetdb
因此我更改了数据源 url
spring.datasource.url= jdbc:mysql://vetdb:3079/vetdb?useSSL=false
现在,当我运行 docker-compose up --build
时,我得到 Caused by: java.net.ConnectException: Connection refused (Connection refused)
应用程序属性
spring.jpa.hibernate.ddl-auto=update
spring.datasource.url= jdbc:mysql://vetdb:3079/vetdb?useSSL=false
spring.datasource.username=root
spring.datasource.testWhileIdle = true
spring.datasource.validationQuery = SELECT 1
spring.datasource.password=root
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.platform=mysql
我是 Docker 的新手,我希望有人能帮助我。 对不起我糟糕的英语
提前准备好
编辑 感谢@David Maze 提供的解决方案! spring.datasource.url=jdbc:mysql://vetdb:3306/vetdb?useSSL=false
jetty worker 组成
version: '3'
services:
vetdb:
container_name: vetdb
hostname: vetdb
image: mysql:latest
command: --default-authentication-plugin=mysql_native_password
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=vetdb
- MYSQL_PASSWORD=root
volumes:
- ./mysql-data:/var/lib/mysql
VET:
hostname: ${VET_HOSTNAME}
container_name: ${VET_HOSTNAME}
image: openjdk:8-jdk-alpine
ports:
- "${VET_PORT}:8080"
volumes:
- "/dockervolumes/microservices/VET/tmp:/tmp"
- "./jar:/jar"
entrypoint:
- "java"
- "-Djava.security.egd=file:/dev/./urandom"
- "-jar"
- "/jar/${VET_JAR_NAME}.jar"
depends_on:
- vetdb
最佳答案
当您使用容器名称作为主机名在容器之间进行连接时,您必须直接使用服务器运行的端口号。是否发布了任何端口并不重要(docker run -p
,Docker Compose ports:
行);您将使用这些行中的第二个端口号。
在你的情况下,这意味着使用标准的 MySQL 端口 3306(即使你已经发布到主机上的不同端口)
jdbc:mysql://vetdb:3306/vetdb?useSSL=false
关于java - Docker Mysql + Spring 连接被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52312297/