记录一个Docker安装mysql无法外部访问处理过程

使用docker-compse安装了一套系统。

结果发现mysql等中间件无法通过主机ip访问。

尝试使用 telnet 127.0.0.1 3306可以通,telnet 主机IP 3306不通。

经过各种折腾,发现问题。

居然没有创建ipv4的端口映射。

查了下资料发现,现在的很多新版本系统,都是默认ipv6网络优先。

然后安装docker后,docker默认使用ipv6构建docker0网络。

所以容器端口映射,仅创建了tcp6的端口,没有tcp的端口。也就是不支持使用ipv4访问。

解决办法:

修改主机/etc/docker/daemon.json的配置,增加如下配置项:

{
  "ipv6": false,
  "fixed-cidr-v6": ""
}

然后重启docker服务:

sudo systemctl restart docker

再查看

然后再telnet 主机IP 3306就可以了。

该方法同样可以解决redis等其他中间件问题。重点是这个网络问题。

这里补充一下,有一些细节配置还是需要注意的。例如设置mysql或者redis监听:0.0.0.0

version: '3'
services:
#创建mysql数据库
  szxc-mysql:
    image: "image.sd001.cn:30003/base/mysql:8.0.12"
    privileged: true
    environment:
    - "MYSQL_ROOT_PASSWORD=Dict@2024"
    - "TZ=Asia/Shanghai"
    volumes:
    - "/szxc/mysql:/var/lib/mysql"
    container_name: szxc-mysql
    command: --default-authentication-plugin=mysql_native_password --bind-address=0.0.0.0
    #ports:
    #  - "3306:3306"
    restart: always
    network_mode: "host"
    deploy:
     resources:
      limits:
        memory: "2048M"
      reservations:
        memory: "20M"  
#创建redis
  szxc-redis:
    image: "image.sd001.cn:30003/base/redis:6.0.9-alpine"
    volumes:
    - "/szxc/redis/data:/data"
    environment:
    - "TZ=Asia/Shanghai"
    - "REDIS_PASSWORD=Dict@2024"
    container_name: szxc-redis
    command: redis-server --bind 0.0.0.0 --protected-mode no
    #ports:
    #  - "6379:6379"
    restart: always
    network_mode: "host"
    deploy:
     resources:
      limits:
        memory: "2048M"
      reservations:
        memory: "20M"

如果没有配置0.0.0.0的监听,本身就没法远程访问。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值