关于 Docker-compose 启动 Mysql 的问题,机器拔电后重启无法从外部连接 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
momo31
V2EX    程序员

关于 Docker-compose 启动 Mysql 的问题,机器拔电后重启无法从外部连接

  •  
  •   momo31 2023-06-15 14:42:09 +08:00 2724 次点击
    这是一个创建于 849 天前的主题,其中的信息可能已经有所发展或是发生改变。

    基本信息:在公司装了台 e5 服务器,又通过 pve 装了 centos7 ,方便中间件调试。 在 centos7 上通过 docker-compose 部署了 mysql 容器,由于公司规定下班禁止电源插电。于是变设置了一系列自启。 但是某些时候就会发生 mysql 容器启动了,无法从外部连接 mysql ,只能通过 docker exec -it mysql bash 登录容器,在容器内部登录 msyql 。

    这是为什么? 下面是 docker-compose 启动文件

    $ cat docker-compose.yml version: '3' services: mysql-db-8: container_name: mysql8.26 # 指定容器的名称 image: mysql:8.0.26 # 指定镜像和版本 ports: - "3309:3306" environment: MYSQL_ROOT_PASSWORD: "root" MYSQL_ROOT_HOST: "%" volumes: - "./mysql/data:/var/lib/mysql" # 挂载数据目录 - "./mysql/conf:/etc/mysql/conf.d" # 挂载配置文件目录 #restart: always command: # 将 mysql8.0 默认密码策略 修改为 原先 策略 (mysql8.0 对其默认策略做了更改 会导致密码无法匹配) --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci --explicit_defaults_for_timestamp=true --lower_case_table_names=1 
    30 条回复    2023-06-16 11:20:47 +08:00
    hefish
        1
    hefish  
       2023-06-15 14:55:33 +08:00
    无法从外部连 mysql 是 3309 端口都不开吗?
    还是连了就挂起?
    docker logs mysql-db-8 里面能看到啥日志不?比如绑定端口有关的那些?
    OutOfMemoryError
        2
    OutOfMemoryError  
       2023-06-15 14:59:50 +08:00
    先看看日志 确认 mysql 起来了吗,
    my.cnf 一般要 744 权限,目录一般给 999:999
    然后本地 lsof -i:3309 看下端口起来没 本地能不能连上
    如果能连上就看下 iptables 之类的有没有拦截
    momo31
        3
    momo31  
    OP
       2023-06-15 15:00:22 +08:00
    下面是日志图,不正常的情况没有绑定 3306 端口,我不理解,该怎么修复呢
    momo31
        4
    momo31  
    OP
       2023-06-15 15:01:31 +08:00
    @hefish #1 从容器内部可以登陆,可以 mysqldump ,但是无法从外部连接。下面有部分日志
    momo31
        5
    momo31  
    OP
       2023-06-15 15:03:18 +08:00
    @OutOfMemoryError #2 确定起来了,能够登录容器内部,执行 mysql 命令,在外面连不上,从服务器也连不上容器端口,看日志好像是容器内部端口没绑定 3306 。日志在下面贴了
    defunct9
        6
    defunct9  
       2023-06-15 15:05:35 +08:00   2
    开 ssh ,让我上去看看
    perfectlife
        7
    perfectlife  
       2023-06-15 15:09:19 +08:00
    试试直接用 host 网络,docker-compose.yml 中用 network_mode: "host"
    momo31
        8
    momo31  
    OP
       2023-06-15 15:12:03 +08:00
    @defunct9 #6 内网不允许哈
    momo31
        9
    momo31  
    OP
       2023-06-15 15:18:18 +08:00
    @perfectlife #7 改了,并没有用,日志还是 port 为 0
    perfectlife
        10
    perfectlife  
       2023-06-15 15:26:39 +08:00
    @cksspk 可以贴一下你的 mysql 配置文件么
    perfectlife
        11
    perfectlife  
       2023-06-15 15:30:08 +08:00
    @cksspk 猜测是因为网络问题,你看下 show variables like 'port'; 这个是不是显示 0 ,show variables like 'skip_networking'; 这个是不是为 No
    momo31
        12
    momo31  
    OP
       2023-06-15 15:32:13 +08:00
    @perfectlife #10 只配置了字符信息
    iyiluo
        13
    iyiluo  
       2023-06-15 15:33:48 +08:00
    可能防火墙问题,systemctl restart firewalld
    perfectlife
        14
    perfectlife  
       2023-06-15 15:42:06 +08:00
    @cksspk 可能和 skip-grant-tables 有关系,参考下 https://blog.csdn.net/m0_56007820/article/details/125769471 这个
    julyclyde
        15
    julyclyde  
       2023-06-15 15:45:03 +08:00
    @iyiluo 不可能
    pcmid
        16
    pcmid  
       2023-06-15 15:47:01 +08:00 via iPhone
    是不是进 safe mode 了
    momo31
        17
    momo31  
    OP
       2023-06-15 16:03:33 +08:00
    @perfectlife #14 通过 注释掉 skip-grant-tables 然后,通过 docker-compose down , up -d 重启绑定到了 3306 ,但是密码连接不上了。。。
    perfectlife
        18
    perfectlife  
       2023-06-15 16:13:13 +08:00
    @cksspk 你知道密码,就密码登录,不知道密码就先加上 skip-grant-tables ,容器内登录修改密码,然后注释了 skip-grant-tables 在登录
    november
        19
    november  
       2023-06-15 16:17:04 +08:00
    看看是不是防火墙 iptables 的问题。
    kaedeair
        20
    kaedeair  
       2023-06-15 16:59:41 +08:00
    关掉 selinux 试试
    proxytoworld
        21
    proxytoworld  
       2023-06-15 17:01:18 +08:00
    挂起并恢复虚拟机时,运行的 docker 会连不上( docker ip 无法 ping )

    /etc/NetworkManager/NetworkManager.conf

    ```c
    [keyfile]
    unmanaged-devices=interface-name:docker*;interface-name:veth*;interface-name:br-*;interface-name:vmnet*;interface-name:vboxnet*
    ```

    systemctl restart NetworkManager
    hefish
        22
    hefish  
       2023-06-15 19:31:01 +08:00
    截图上看,倒像是某种机制阻止了 bind 3306 或者 33060 。
    不知道最后一句 mbind: operation not permitted 是哪个端口绑定失败,3306 还是 33060 ,还是两者都失败。
    这个登进容器不知道能不能看到 ss -tlnp 的信息。
    这个出问题前是正常 shutdown 或者 poweroff 的?
    gzlock
        23
    gzlock  
       2023-06-15 19:47:00 +08:00
    既然能进容器内部,直接 dump 出 sql 备份数据,停掉容器( docker-compose.yml 注释掉),在 docker-compose.yml 新写一个不同名字不同本地 volume 目录的新 mysql 容器,导入 sql 数据没啥问题就把旧容器删掉咯
    dode
        24
    dode  
       2023-06-15 19:52:46 +08:00
    也许是 docker 和 firewalld 和 centos7 直接有兼容性问题

    可以试试 ubuntu22.04 系统跑 docker ,mysql8
    youngPacce
        25
    youngPacce  
       2023-06-15 20:09:55 +08:00 via Android
    iptables -L -n 看看是不是没有暴露 docker 的端口,我有一次重启了之后 docker 上的服务都用不了了,重启 docker 就好了
    winson030
        26
    winson030  
       2023-06-15 21:23:51 +08:00 via iPhone
    配置文件没写 restart 相关的参数,宿主机重启后容器不会自动起来的,你这个 unless-stopped 试试
    winson030
        27
    winson030  
       2023-06-15 21:26:32 +08:00 via iPhone
    还有一个就是,docker 的网卡映射最好也要写一下,你可以自定义一个网卡,将 mysql 的容器 绑过去,最后实在不行就 systemctl restart docker
    momo31
        28
    momo31  
    OP
       2023-06-16 09:04:38 +08:00
    @dode #24 有可能,但是习惯了 centos
    momo31
        29
    momo31  
    OP
       2023-06-16 09:24:52 +08:00
    罪魁祸首好像是直接拔电源后系统表坏了
    xyjincan
        30
    xyjincan  
       2023-06-16 11:20:47 +08:00
    搞个定时任务自动关机吧
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2616 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 42ms UTC 06:07 PVG 14:07 LAX 23:07 JFK 02:07
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86