docker使用mysql時的埠對映問題
阿新 • • 發佈:2019-01-01
關於埠對映:
java程式碼中的jdbc:
db.jdbcUrl=jdbc:mysql://database:3306/Sfwefwwe
compose中的對映:”33060:3306”
{
"version": "2",
"services": {
"web-shop": {
"image": "86xxxx89/shop:v1",
"ports": [
"8080:8080"
],
"volumes": [
"/Volumes/files:/Volumes/files"
],
"depends_on": [
"database"
]
},
"database": {
"image": "mysql:5.7",
"ports": [
"33060:3306"
],
"volumes": [
"/volume/mysql/data/shxxxrpro:/var/lib/mysql"
] ,
"environment": {
"MYSQL_DATABASE": "mysql",
"MYSQL_USER": "root",
"MYSQL_PASSWORD": "alex1267",
"MYSQL_ROOT_PASSWORD":"alexx67"
}
}
}
}
為什麼compose中依然是33060:3306 而不是 33060:33060?
(外網33060的初衷是不跟外面已經存在的mysql衝突)
答:因為java程式在連線mysql的時候,尋求mysql的ip是docker自動處理的(只要指定服務名稱database).
docker會從內部尋找到MySQL的ip, 此時這個ip上正確暴露的介面當然是3306 而不是33060.
當然,如果外部程式連線mysql,就要使用33060埠了