问题描述
windows
本地 使用 docker-compose
运行 mysql
容器后,无法访问
问题复现
docker-compose.yml
version: '2'
services:
mysql:
container_name: "mysql"
network_mode: "host"
environment:
MYSQL_ROOT_PASSWORD: "123456"
MYSQL_USER: 'root'
MYSQL_PASS: '123456'
image: "mysql:5.7.30"
restart: always
ports:
- 3306:3306
volumes:
- "./db:/var/lib/mysql"
- "./conf:/etc/mysql"
- "./log:/var/log/mysql"
yml
运行
使用docker-compose
运行:
docker-compose up -d
shell
此时正常运行
进入容器
winpty docker exec -it mysql bash
shell
登陆mysql
mysql -uroot -p123456
shell
配置外界访问
GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY "123456";
flush privileges;
shell
测试
经过测试,外界无法连接
解决方法
删除或者注释掉docker-compose.yml
中 network_mode
一项
原理分析
简单说明一下network_mode
这个配置:
netwokr_mode
用于配置网络模式,相当于 docker run
中的 --network
参数,默认是 bridge
桥接模式
network_mode: "bridge"
默认的网络模式。如果没有指定网络驱动,默认会创建一个 bridge
类型的网络。桥接模式一般是用在应用是独立的情况,容器之间不需要互相通信
network_mode: "host"
host
网络模式,针对的也是应用是独立的情况,在 host
网络模式下,移除了宿主机与容器之间的网络隔离,荣容器直接使用宿主机的网络,这样就能在容器中访问宿主机网络
network_mode: "none"
none
表示对于这个 container
,禁用所有的网络