无法在OSX上的Docker内部连接到MySQL

时间:2019-06-20 00:14:43

标签: mysql macos docker connection hang

最近,我的Docker容器拒绝连接。过去效果很好,这个问题是新问题,到目前为止没有任何解释。

停止并重新启动容器无效。
停止并重新启动Mac版Docker for Desktop无效。

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

例如,我可以执行到容器中

docker exec -it db /bin/bash

从容器中我可以访问mysql没问题。

我尝试在mysql中启用常规日志以尝试对其进行调试:   它显示没有活动...

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

在过去的6个月中,所有这些都运行良好,但是在过去一周左右的短暂工作后,突然开始阻止连接。...

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

这是我的Dockerfile

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问题时如何进行调试。

1 个答案:

答案 0 :(得分:1)

可能存在一个安全限制,阻止了来自 root 用户的连接。您可以按照以下步骤尝试创建具有必要特权的本地用户吗?

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