无法在OSX上Docker中连接MySQL

4

最近,我的Docker容器拒绝连接。它以前工作得很好,这个问题是新的,目前还没有解释。

停止和重新启动容器没有效果。
停止和重新启动Mac上的Docker for Desktop也没有效果。

我只能通过重新启动我的OSX笔记本电脑来解决它(macOS Mojave v 10.14.5)。 然后它会工作一段时间,然后又开始阻止连接尝试。

我可以进入容器,例如:

docker exec -it db /bin/bash

我可以在容器内轻松访问mysql。

我已尝试启用mysql的常规日志以尝试调试它:它没有显示任何活动……

我的笔记本电脑有足够的可用磁盘空间(剩余188GB)。

所有这些都在过去的6个月里很好地工作,但在最近一周左右的短暂工作后突然开始阻止连接……

感谢您提供任何线索或想法。

这是我的Docker文件:

FROM mysql:5.7

RUN DEBIAN_FRONTEND=noninteractive apt-get update
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y apt-utils
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y procps
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y debianutils
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y iputils-ping
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y net-tools
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y vim
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y less
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y man
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y sudo

WORKDIR .

COPY ./my.cnf /etc/mysql/my.cnf

#CMD ["mysqld", "--general_log=1", "--log-raw", "--log-error"]
CMD ["mysqld"]

我的docker-compose文件:

(MYSQL_DATA_FOLDER是一个环境变量,设置为有效路径

version: '3.5'
services:
  database:
    image: database
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: ""
      MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
    volumes:
      - mydatavolume:${MYSQL_DATA_FOLDER}
    build:
      context: .

volumes:
  mydatavolume:

networks:
  default:
    name: dev_network
    driver: bridge

如何启动它:

docker-compose build; 
docker-compose run --service-ports --volume=$MYSQL_DATA_FOLDER:/var/lib/mysql --name db --rm database

我通常是通过在 OSX 终端中使用 MySQL 客户端进行连接的。
mysql -h localhost -P 3306 --protocol=tcp -u root

我也尝试了使用127.0.0.1和docker inspect显示的IP地址的变化。

我的my.cnf文件

[mysqld]
sql_mode = ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

尝试添加:

bind-address=0.0.0.0

针对上述问题的解决方案无法帮助

用户表

mysql> SELECT host, user FROM mysql.user;
+-----------+---------------+
| host      | user          |
+-----------+---------------+
| %         | root          |
| %         | some_user     |
| localhost | mysql.session |
| localhost | mysql.sys     |
| localhost | root          |
+-----------+---------------+
5 rows in set (0.01 sec)

新的信息:

我已经移除了数据卷并且让它创建一个新的。现在问题已经解决了,所以看来这是一个 MySQL 问题而不是 Docker 问题。如果这种问题再次出现,我仍然想知道如何调试 MySQL 问题。


my.cnf在那里... - slashdottir
我无法访问其他机器... - slashdottir
连接会无限期地挂起。最终,我的调试器超时等待。Mysql客户端永远挂起。我没有运行任何我知道的防火墙软件 - 除此之外,在重新启动后它可以工作一段时间,然后又开始阻止连接。 - slashdottir
请尝试使用以下命令连接到 MySQL 数据库:mysql -h 127.0.0.1 -u root -p - seddikomar
也许你应该运行 service-port: docker-compose run --service-ports db - seddikomar
显示剩余4条评论
1个回答

2
也许存在安全限制,阻止了root用户的连接。您可以尝试按照以下步骤创建具有必要特权的本地用户。"Original Answer"翻译成"最初的回答"。
mysql> CREATE USER 'some_user'@'%' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'some_user'@'%' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;

重新启动容器,尝试使用本地用户连接。

mysql -h 127.0.0.1 -u some_user --protocol=TCP -P 3306 -p

1
好的,它又挂了,以非root用户身份登录也没有任何区别。我希望我知道一种调试这个问题的方法。 - slashdottir

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接