запуск python и mysql с ошибкой docker — не удается подключиться

#python #docker #mysql-connector

#python #docker #mysql-connector

Вопрос:

Я использую mysql-connector, когда я запускаю контейнер с помощью docker, я получаю эту ошибку:

 mysql.connector.errors.InterfaceError: 2003: Can't connect to MySQL server on 'db:3306' (-5 No address associated with hostname)
 

но когда я запускаю проект, используя только python, он выполняется без ошибок

Я хочу использовать phpmyadmin только для базы данных, пожалуйста, помогите.

Комментарии:

1. Где находится база данных? Находится ли это в контейнере docker? Вы создали базу данных в отдельном контейнере docker? Я предпочитаю создавать контейнер docker для каждого компонента отдельно, а затем открывать порты, чтобы разрешить связь между ними. Обратите внимание, что если вы создаете отдельный docker для своей базы данных, вам потребуется смонтировать отдельную папку хранения в docker, чтобы сохранить данные постоянными. Если это вас интересует, я могу вставить некоторый пример кода, с которым вы можете работать.

2. Звучит хорошо, да, пожалуйста, я тоже хочу, чтобы это было действительно срочно

3. И, кстати, база данных находится в main.py и контейнер docker

Ответ №1:

Чтобы создать docker с вашего компьютера Linux:

 docker pull mysql:latest
 

Чтобы запустить его и смонтировать постоянную папку с доступом к порту на 3306 (std-порт для mysql):

 docker run --name=mysql_dockerdb --env="MYSQL_ROOT_PASSWORD=<your_password>" -p 3306:3306 -v /home/ubuntu/sql_db/<your_dbasename>:/var/lib/mysql -d mysql:latest
 

Для подключения к экземпляру docker, чтобы вы могли создать базу данных в docker:

 docker exec -it mysql_dockerdb mysql -uroot -p<your_password>
 

Мой SQL-код для создания базы данных:

 CREATE DATABASE dockerdb;
CREATE USER 'newuser'@'%' IDENTIFIED BY 'newpassword';
GRANT ALL PRIVILEGES ON dockerdb.* to 'newuser'@'%';
ALTER USER 'username'@'%' IDENTIFIED WITH mysql_native_password BY 'userpassword';
 

Теперь у вас будет docker, работающий с постоянной базой данных SQL. Вы подключаетесь к нему из своего кода Python. Я запускаю Flask MySQL. Вы захотите сохранить свои пароли в переменных среды. Я использую Mac, поэтому мой ~/.bash_profile содержит:

 export RDS_LOGIN="mysql pymysql://<username>:<userpassword>@<dockerhost_ip>/dockerdb"
 

В Python:

 import os

SQLALCHEMY_DATABASE_URI = os.environ.get('RDS_LOGIN')
 

И в этот момент вы должны иметь возможность подключиться обычным способом Python. Обратите внимание, что я умолчал о любых аспектах безопасности, предполагая, что это локально за брандмауэром.