Не удается подключиться к MySQL внутри докера на OSX - PullRequest
1 голос
/ 20 июня 2019

В последнее время мой докер-контейнер отказывается от соединений. В прошлом это работало хорошо, этот вопрос новый и пока не имеет объяснения.

Остановка и перезапуск контейнера не имеет никакого эффекта.
Остановка и перезапуск Docker для Desktop для Mac не имеет никакого эффекта.

Я могу решить это только перезагрузкой моего ноутбука OSX. (macOS Mojave v 10.14.5) Затем он будет работать некоторое время, а затем снова начнет блокировать попытки подключения

Я могу выполнить в контейнер, например,

docker exec -it db /bin/bash

Изнутри контейнера я могу получить доступ к mysql без проблем.

Я попытался включить общий журнал в mysql, чтобы попытаться отладить его: Не показывает активности ...

На моем ноутбуке достаточно свободного дискового пространства (188 ГБ)

Все это работало хорошо в течение последних 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

Как я обычно подключаюсь (через клиент mysql в терминале osx)

mysql -h localhost -P 3306 --protocol=tcp -u root

Я также пробовал варианты с использованием 127.0.0.1, а также IP-адреса, обнаруженного Docker Inspect

My 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 Ответ

1 голос
/ 20 июня 2019

Возможно, существует ограничение безопасности, запрещающее подключения от пользователя 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
...