Удаленный доступ к серверу mysql, работающему в Docker-контейнере - PullRequest
1 голос
/ 18 апреля 2019

Как получить доступ к серверу MySQL, работающему в Docker-контейнере на удаленной машине.

Вот мой dockerfile:

MAINTAINER debu_bbsr@yahoo.com
RUN apt-get update \
 && DEBIAN_FRONTEND=noninteractive apt-get install -y mysql-server \
 && sed -i "s/127.0.0.1/0.0.0.0/g" /etc/mysql/mysql.conf.d/mysqld.cnf \
 && mkdir /var/run/mysqld \
 && chown -R mysql:mysql /var/run/mysqld

VOLUME ["/var/lib/mysql"]

EXPOSE 3306

CMD ["mysqld_safe"]

Я создал образ:

sudo docker build -t deb_mysql_image .

Запустите контейнер Docker с изображением выше:

sudo docker run -i -t -d -p 3306:3306 --name mysql_deb_container deb_mysql_image

Войдите в контейнер MySQL:

`k8smaster@k8smaster:~/debashish$ sudo docker exec -it mysql_deb_container mysql`

Создайте разных пользователей и базу данных:

mysql> create user debashish identified by 'debashish';
mysql> create user debmysql identified by 'debmysql';
mysql> create database debdb;
mysql> use debdb;

Предоставьте привилегии пользователям и создайте таблицу:

mysql> GRANT ALL PRIVILEGES ON *.* TO 'debashish' WITH GRANT OPTION;  



CREATE TABLE debtbl1 (name VARCHAR(20), address VARCHAR(50));

Заполните таблицу:

insert into debtbl1 values('Debashish', 'Shanghai');
insert into debtbl1 values('Debu', 'Livingston, Shanghai');

Теперь получите доступ к содержимому вышеупомянутой таблицы MySQL с удаленной машины с клиентом MySQL:

k8snode1@k8snode1:~$ mysql -u 'debashish' -p  -h 10.10.10.2 -P 3306 -D debdb
Enter password

«Иногда» я сталкиваюсь с проблемой -

ОШИБКА 1045 (28000): доступ запрещен для пользователя

Все, что я пропустилсделать его надежной системой, чтобы я не встречал "иногда" вышеуказанную ошибку.

Ответы [ 2 ]

0 голосов
/ 22 апреля 2019

Проблема заключалась в том, что - при перезапуске Pod все привилегии, назначенные базе данных Mysql, также стирались.

Следовательно, решение было - написать скрипт оболочки, который будет:

    1.  Executed when the Pod is started/scaled-in/container is started.
    2.  The shell script automatically creates the database and users.
    3.  Shell script then grants permission to the users for the DB.
0 голосов
/ 18 апреля 2019

Скорее всего, у вашего пользователя нет прав доступа к этому серверу, либо предоставьте права для этого конкретного сервера, либо глобально.

Пробег:

GRANT ALL PRIVILEGES ON *.* TO 'debashish'@'%' WITH GRANT OPTION; 
FLUSH PRIVILEGES;
...