我通过Docker设置了一个Mysql Server,在我的IDE里面运行我的微服务时一切正常,我能够通过我的数据库连接到我的数据库
spring.datasource.url= jdbc:mysql://docker:3079/vetdb?useSSL=false
现在我想通过Docker测试部署我的微服务
泊坞窗,撰写
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)
application.properties
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的新手,我希望这里有人可以帮助我。对不起,我的英语很恐怖
Ty提前
编辑感谢@David Maze的解决方案! spring.datasource.url = jdbc:mysql:// vetdb:3306 / vetdb?useSSL = false
Docker撰写
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:
line);你会使用这些行中的第二个端口号。
在您的情况下,这意味着使用标准MySQL端口3306(即使您已发布到主机上的其他端口)
jdbc:mysql://vetdb:3306/vetdb?useSSL=false