1. 程式人生 > >docker使用mysql時的埠對映問題

docker使用mysql時的埠對映問題

關於埠對映:

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埠了