Сеть – Как Подключиться К Базе Данных Mysql В Контейнере Докеров?

  • Автор темы Vladimir478663
  • Обновлено
  • 22, Oct 2024
  • #1

запуск по умолчанию

mysql
server:

nicholas $ 
nicholas $ mysql -h localhost -P 3306 --protocol=tcp -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 23
Server version: 8.0.21 MySQL Community Server - GPL

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 
mysql> SELECT host, user FROM mysql.user;
+-----------+------------------+
| host      | user             |
+-----------+------------------+
| %         | root             |
| %         | user             |
| localhost | mysql.infoschema |
| localhost | mysql.session    |
| localhost | mysql.sys        |
| localhost | root             |
+-----------+------------------+
6 rows in set (0.00 sec)

mysql> 

пытаюсь войти в контейнер, но получаю хост

localhost
instance:

tcp

Я пытаюсь это явно

root $ 
root $ netstat -peanut | grep 3306
tcp6       0      0 :::3306                 :::*                    LISTEN      0          25585352   488887/docker-proxy 
root $ 
root $ docker inspect mysql | grep password

"MYSQL_ROOT_PASSWORD=password",
root $ 
address because:

user

хотя я тоже получаю тот же результат для

root $ 
root $ docker exec -ti --user root mysql bash
bash-4.2# 
bash-4.2# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 26
Server version: 8.0.21 MySQL Community Server - GPL

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 
mysql> SELECT host, user FROM mysql.user;
+-----------+------------------+
| host      | user             |
+-----------+------------------+
| localhost | healthchecker    |
| localhost | mysql.infoschema |
| localhost | mysql.session    |
| localhost | mysql.sys        |
| localhost | root             |
+-----------+------------------+
5 rows in set (0.00 sec)

mysql> 
in that I'm still logging into the host instance of
MySQL
а не контейнер.

localhost

который девственен, не имеет пользователя

root $ 
root $ docker inspect mysql | grep IP

"LinkLocalIPv6Address": "",

"LinkLocalIPv6PrefixLen": 0,

"SecondaryIPAddresses": null,

"SecondaryIPv6Addresses": null,

"GlobalIPv6Address": "",

"GlobalIPv6PrefixLen": 0,

"IPAddress": "172.17.0.2",

"IPPrefixLen": 16,

"IPv6Gateway": "",

"IPAMConfig": null,

"IPAddress": "172.17.0.2",

"IPPrefixLen": 16,

"IPv6Gateway": "",

"GlobalIPv6Address": "",

"GlobalIPv6PrefixLen": 0,
root $ 
configured on the container.

Кроме того:

IP

и поэтому я ожидал этого, указав

nicholas $ 
nicholas $ mysql -h 172.17.0.2 -P 3306 --protocol=tcp -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 21
Server version: 8.0.21 MySQL Community Server - GPL

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 
mysql> SELECT host, user FROM mysql.user;
+-----------+------------------+
| host      | user             |
+-----------+------------------+
| %         | root             |
| %         | user             |
| localhost | mysql.infoschema |
| localhost | mysql.session    |
| localhost | mysql.sys        |
| localhost | root             |
+-----------+------------------+
6 rows in set (0.00 sec)

mysql> 
for
MySQL
с хоста я смогу подключиться к докер-контейнеру. Но этого не происходит, я получаю базу данных хоста:

root $ 
root $ docker run --name mysql -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password mysql/mysql-server:latest
d2b066e9aa4192b45334e9dada923b6b3dca5703e811733e150333f52849c1a1
root $ 
root $ docker ps -a
CONTAINER ID        IMAGE                       COMMAND                  CREATED             STATUS                            PORTS                               NAMES
d2b066e9aa41        mysql/mysql-server:latest   "/entrypoint.sh mysq…"   9 seconds ago       Up 6 seconds (health: starting)   0.0.0.0:3306->3306/tcp, 33060/tcp   mysql
root $ 

я думать если я удалю

mysql
server from the host I'll be able to connect to the docker database, but surely there's a better approach.

#docker #сеть #базы данных #mysql #ports

Vladimir478663


Рег
30 Jun, 2013

Тем
72

Постов
180

Баллов
570
  • 25, Oct 2024
  • #2

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

  • Сначала создайте каталог на хосте для монтирования контейнера.
    mysql -h localhost -u user -p -S /home/user/mysql-1/mysql.sock
    
  • Использовать
    docker run --name mysql -d \
    -v /home/user/mysql-1:/var/lib/mysql \
    -e MYSQL_ROOT_PASSWORD=password \
    mysql/mysql-server 
    
    option in
    /var/lib/mysql
    прикрепить путь хоста к контейнеру
  • Подключитесь от клиента, используя
    /home/user/mysql-1
    and point to
    mkdir /home/user/mysql-1
    
    файл сокета

Пример:

mysql.sock

Затем запустите контейнер, чтобы

-S
will attach to container's
docker run
:

-v

После запуска контейнера вы можете подключиться к нему с помощью:

/var/lib/mysql
 

Фука


Рег
09 Apr, 2011

Тем
68

Постов
180

Баллов
600
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно