问题描述

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.ymlnetwork_mode一项

原理分析

简单说明一下network_mode这个配置:

netwokr_mode用于配置网络模式,相当于 docker run 中的 --network 参数,默认是 bridge 桥接模式

  • network_mode: "bridge"

默认的网络模式。如果没有指定网络驱动,默认会创建一个 bridge 类型的网络。桥接模式一般是用在应用是独立的情况,容器之间不需要互相通信

  • network_mode: "host"

host 网络模式,针对的也是应用是独立的情况,在 host 网络模式下,移除了宿主机与容器之间的网络隔离,荣容器直接使用宿主机的网络,这样就能在容器中访问宿主机网络

  • network_mode: "none"

none 表示对于这个 container ,禁用所有的网络

打赏
  • 微信
  • 支付宝
评论
来发评论吧~
···

歌手: