我有一个码头组合,其中包含以下说明:
version: '3.8'
services:
mysql-standalone:
container_name: marqueblanchebd
image: marqueblanchebd:latest
ports:
- "3307:3306"
volumes:
- data:/var/lib/mysql
spring-boot:
image: testmb
container_name: mbwebservice
ports:
- "8091:8080"
build:
context: .
dockerfile: Dockerfile
depends_on:
- mysql-standalone
environment:
SPRING_DATASOURCE_PASSWORD: ramses2021
SPRING_DATASOURCE_URL: jdbc:mysql://marqueblanchebd:3307/marque_blanche?useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
SPRING_DATASOURCE_USERNAME: root
volumes:
- ./:/uploads/deployment
volumes:
data:当我运行-compose时,在我的springboot项目中发生以下错误:由: java.net.ConnectException: Connection拒绝(连接拒绝)引起
但是,当我将默认的mysql端口3306 ("3306:3306")放入docker-组合文件中时,我的springboot项目成功地将自己连接到数据库容器。下面是我的mysql dockerfile:
FROM mysql:latest
EXPOSE 3307
ENV MYSQL_DATABASE=marque_blanche
ENV MYSQL_ROOT_PASSWORD=ramses2021
ADD marque_blanche.sql /docker-entrypoint-initdb.d发布于 2022-09-11 10:16:06
在docker network内部,服务名marqueblanchebd将解析为容器IP。对于SPRING_DATASOURCE_URL=jdbc:mysql://marqueblanchebd:3307/...,连接尝试是对<container_ip>:3307进行的,但是数据库正在侦听端口3306,因此连接被拒绝。要使连接正常工作,您需要配置mysql服务以侦听端口3307而不是端口3306。通信量不会从docker network传输到主机,然后从主机传输回docker network。
我建议不要向主机公开数据库,您可以从mysql-standalone服务中删除mysql-standalone映射,例如:
services:
mysql-standalone:
container_name: 'marqueblanchebd'
image: 'marqueblanchebd:latest'
expose:
- '3306'
volumes:
- 'data:/var/lib/mysql'..。并将spring-boot服务配置为使用默认的mysql-standalone服务端口:
spring-boot:
# ...
environment:
# ...
SPRING_DATASOURCE_URL: jdbc:mysql://marqueblanchebd:3306/marque_blanche?useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
# ...这将隔离docker network中的数据库。
发布于 2022-09-14 08:33:18
https://stackoverflow.com/questions/73678096
复制相似问题