![](/img/trans.png)
[英]How to connect to MySQL created with docker to another port (not port 3306)?
[英]how to make my mysql docker container accessible on another port apart 3306?
我有一个 docker 组合,其中包含以下说明:
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:
当我运行docker-compose时,我的 springboot 项目发生以下错误: 原因:java.net.ConnectException:连接被拒绝(连接被拒绝)
但是当我将默认的 mysql 端口 3306 ("3306:3306") 放入 docker-compose 文件时,我的 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
在docker network
中,服务名称marqueblanchebd
将解析为容器 IP。 鉴于SPRING_DATASOURCE_URL=jdbc:mysql://marqueblanchebd:3307/...
尝试连接到<container_ip>:3307
但是数据库正在侦听端口3306
,因此连接被拒绝。 要使连接正常工作,您需要将mysql
服务配置为侦听端口3307
而不是端口3306
。 流量不会从docker network
到主机,然后从主机返回到docker network
。
我建议不要将数据库暴露给主机,您可以从mysql-standalone
服务中删除ports
映射,例如:
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
内部的数据库。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.