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

328 天前
 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
2036 次点击
所在节点    程序员
30 条回复
hefish
328 天前
无法从外部连 mysql 是 3309 端口都不开吗?
还是连了就挂起?
docker logs mysql-db-8 里面能看到啥日志不?比如绑定端口有关的那些?
OutOfMemoryError
328 天前
先看看日志 确认 mysql 起来了吗,
my.cnf 一般要 744 权限,目录一般给 999:999
然后本地 lsof -i:3309 看下端口起来没 本地能不能连上
如果能连上就看下 iptables 之类的有没有拦截
cksspk
328 天前
下面是日志图,不正常的情况没有绑定 3306 端口,我不理解,该怎么修复呢
cksspk
328 天前
@hefish #1 从容器内部可以登陆,可以 mysqldump ,但是无法从外部连接。下面有部分日志
cksspk
328 天前
@OutOfMemoryError #2 确定起来了,能够登录容器内部,执行 mysql 命令,在外面连不上,从服务器也连不上容器端口,看日志好像是容器内部端口没绑定 3306 。日志在下面贴了
defunct9
328 天前
开 ssh ,让我上去看看
perfectlife
328 天前
试试直接用 host 网络,docker-compose.yml 中用 network_mode: "host"
cksspk
328 天前
@defunct9 #6 内网不允许哈
cksspk
328 天前
@perfectlife #7 改了,并没有用,日志还是 port 为 0
perfectlife
328 天前
@cksspk 可以贴一下你的 mysql 配置文件么
perfectlife
328 天前
@cksspk 猜测是因为网络问题,你看下 show variables like 'port'; 这个是不是显示 0 ,show variables like 'skip_networking'; 这个是不是为 No
cksspk
328 天前
@perfectlife #10 只配置了字符信息
iyiluo
328 天前
可能防火墙问题,systemctl restart firewalld
perfectlife
328 天前
@cksspk 可能和 skip-grant-tables 有关系,参考下 https://blog.csdn.net/m0_56007820/article/details/125769471 这个
julyclyde
328 天前
@iyiluo 不可能
pcmid
328 天前
是不是进 safe mode 了
cksspk
328 天前
@perfectlife #14 通过 注释掉 skip-grant-tables 然后,通过 docker-compose down , up -d 重启绑定到了 3306 ,但是密码连接不上了。。。
perfectlife
328 天前
@cksspk 你知道密码,就密码登录,不知道密码就先加上 skip-grant-tables ,容器内登录修改密码,然后注释了 skip-grant-tables 在登录
november
328 天前
看看是不是防火墙 iptables 的问题。
kaedeair
328 天前
关掉 selinux 试试

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

https://www.v2ex.com/t/948972

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

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

© 2021 V2EX