У меня есть скрипт python, который выполняет операции с mysql db, используя подпроцесс модуля python. Я новичок в докере и пытаюсь запустить этот код с помощью докера. Я создал файл docker compose для запуска контейнера для моего скрипта python и контейнера для моей mysql db. Объект MySQLConnection из модуля mysql-connector работает нормально, но я хотел бы использовать модуль подпроцесса для выполнения операции mysql в контейнере mysql. Как я могу это сделать?
Это работает:
db = MySQLConnection(host = "mysql-container", user = "root", password = "secret")
cursor = db.cursor()
cursor.execute("SHOW SCHEMAS")
data = cursor.fetchone()
Это дает ошибку: «[Errno 2] Нет такого файла или каталога: 'mysql': 'mysql'».
p = subprocess.Popen(["mysql", "-h", "mysql-container", "-P", "3306", "-u", "root", "-psecret"],
stdout=subprocess.PIPE, stdin=subprocess.PIPE)
p.communicate("source sql_file.sql")
Ах, спасибо за понимание! Я ошибочно установил клиент mysql на хост-контейнер. Сейчас он работает.






Во-первых, как оказалось, на хост-машине отсутствовал клиент mysql.
Однако в целом ненужное раскрытие контейнерных портов не является хорошей практикой. Вместо этого я бы подумал о запуске команд внутри контейнера, например:
docker exec -t container_name bash -c "echo mysql_command | mysql [params]"
у вас установлен клиент mysql на хост-машине?