Как подключиться к базе данных MySQL с помощью SQLAlchemy при запуске приложения и MySQL, работающего как контейнер DockMySql

Форум по Mysql
Ответить
Anonymous
 Как подключиться к базе данных MySQL с помощью SQLAlchemy при запуске приложения и MySQL, работающего как контейнер Dock

Сообщение Anonymous »

Я пытаюсь запустить приложение как образ Docker. Ему необходим доступ к базе данных на сервере. Я пытаюсь запустить все на удаленном сервере, и это сервер Linux. Я использую docker-compose.
Docker-compose:
services:
mysql_service:
image: mysql
container_name: mysql_server
restart: always
ports:
- "3307:3306"
volumes:
- mysql_data:/var/lib/mysql

tests:
build:
dockerfile: dockerfile
container_name: tests
volumes:
- .:/run_docker_app
depends_on:
- ollama
- mysql_service
command: ["pytest", "--disable-warnings", "-rP", "tests"]

Я создаю приложение и запускаю тесты, используя следующий файл рабочего процесса GitHub. Никаких других конфигураций, которые я добавляю в контейнеры Docker, я не добавляю.
docker compose build --no-cache
docker compose up -d mysql_service
docker compose run --rm tests
docker compose logs tests

Файл, который используют тесты, содержит следующий код для создания базы данных и подключения к ней.
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, scoped_session, declarative_base
from sqlalchemy import Column, Integer, String, DateTime
import datetime

DATABASE_URI = ("mysql+pymysql://pyuser:pss0@mysql_service:3306/db")

engine = create_engine(DATABASE_URI, pool_pre_ping=True)
db_session = scoped_session(sessionmaker(bind=engine))

Base = declarative_base()
Base.query = db_session.query_property()

Как подключиться к этому сервису, работающему в той же контейнерной сети? Моя проблема не в том, что Docker не может запустить службу на порту. Проблема в том, что к контейнеру MySQL невозможно получить доступ через SQLAlchemy в той же сети.
Я изменяю базу данных как пользователь, имеющий все привилегии для базы данных. Я подключаю этого пользователя к базе данных с помощью механизма SQLAlchemy. Для этого используется следующий URI. Это не подключается к образу докера на сервере.
("mysql+pymysql://pyuser:pss@mysql_server:3306/db")

Ошибка
E sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (2003, "Can't connect to MySQL server on 'mysql_service' (\[Errno -3\] Temporary failure in name resolution)")

E (Background on this error at:

Я пробовал перезапустить Docker и следил за исправлениями подобных проблем, но не смог решить эту проблему.
mysql conf. выглядит следующим образом:
#
# The MySQL database server configuration file.
#
# One can use all long options that the program supports.
# Run program with --help to get a list of available options and with
# --print-defaults to see which it would actually understand and use.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/serve ... ables.html
# Here is entries for some specific programs
# The following values assume you have at least 32M ram
[mysqld]
#
# * Basic Settings
#
user = mysql
# pid-file = /var/run/mysqld/mysqld.pid
# socket = /var/run/mysqld/mysqld.sock
# port = 3306
# datadir = /var/lib/mysql
# If MySQL is running as a replication slave, this should be
# changed. Ref https://dev.mysql.com/doc/refman/8.0/en ... var_tmpdir
# tmpdir = /tmp
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address = 127.0.0.1
mysqlx-bind-address = 127.0.0.1
#
# * Fine Tuning
#
key_buffer_size = 16M
# max_allowed_packet = 64M
# thread_stack = 256K
# thread_cache_size = -1
# This replaces the startup script and checks MyISAM tables if needed
# the first time they are touched
myisam-recover-options = BACKUP
# max_connections = 151
# table_open_cache = 4000
#
# * Logging and Replication
#
# Both location gets rotated by the cronjob.
#
# Log all queries
# Be aware that this log type is a performance killer.
# general_log_file = /var/log/mysql/query.log
# general_log = 1
#
# Error log - should be very few entries.
#
log_error = /var/log/mysql/error.log
#
# Here you can see queries with especially long duration
# slow_query_log = 1
# slow_query_log_file = /var/log/mysql/mysql-slow.log
# long_query_time = 2
# log-queries-not-using-indexes
#
# The following can be used as easy to replay backup logs or for replication.
# note: if you are setting up a replication slave, see README.Debian about
# other settings you may need to change.
# server-id = 1
# log_bin = /var/log/mysql/mysql-bin.log
# binlog_expire_logs_seconds = 2592000
max_binlog_size = 100M
# binlog_do_db = include_database_name
# binlog_ignore_db = include_database_name


Подробнее здесь: https://stackoverflow.com/questions/798 ... ication-an
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «MySql»