![](/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.