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

2023-06-15 14:42:09 +08:00
 cksspk

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

可以试试 ubuntu22.04 系统跑 docker ,mysql8
youngPacce
2023-06-15 20:09:55 +08:00
iptables -L -n 看看是不是没有暴露 docker 的端口,我有一次重启了之后 docker 上的服务都用不了了,重启 docker 就好了
winson030
2023-06-15 21:23:51 +08:00
配置文件没写 restart 相关的参数,宿主机重启后容器不会自动起来的,你这个 unless-stopped 试试
winson030
2023-06-15 21:26:32 +08:00
还有一个就是,docker 的网卡映射最好也要写一下,你可以自定义一个网卡,将 mysql 的容器 绑过去,最后实在不行就 systemctl restart docker
cksspk
2023-06-16 09:04:38 +08:00
@dode #24 有可能,但是习惯了 centos
cksspk
2023-06-16 09:24:52 +08:00
罪魁祸首好像是直接拔电源后系统表坏了
xyjincan
2023-06-16 11:20:47 +08:00
搞个定时任务自动关机吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://yangjunhui.monster/t/948972

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX