環境:
centos8.0
docker19.03.7
docker-compose1.25.5
mysql5.7
端口映射 13306:3306
防火牆 firewall
現象:
mysql運行在docker容器
不能遠程訪問docker中的mysql
關閉防火牆(sudo systemctl stop firewalld)後,就能遠程訪問,打開防火牆(sudo systemctl start firewalld),mysql就又不能遠程訪問。第一感覺,應該是端口沒有開放,但docker中的mysql使用端口13306,該端口已在防火牆開放
firewall-cmd --permanent --zone=public --add-port=13306/tcp
firewall-cmd —reload
通過Navicat遠程連接仍然失敗,查了無數博客,結合自己理解,需先關閉防火牆,重啓docker(-compose)鏡像,然後再打開防火牆,於是乎
sudo systemctl stop firewalld
docker-compose restart
報錯,如下圖:
報錯原因及解釋,參考https://blog.csdn.net/whatday/article/details/86762264
完整的步驟:
sudo systemctl stop firewalld
sudo systemctl restart docker
docker-compose restart(已關閉的,直接用start命令)
sudo systemctl start firewalld
這樣防火牆firewalld開啓狀態下,mysql也能遠程訪問了
另外我一個習慣:
我一般不直接用docker命令啓動鏡像,都是通過docker-compose.yml這種方式,這種方式將各個參數都放到配置文件裏,維護比較方便