Мое Приложение Python Не Взаимодействует С Mysql Внутри Докера. Может Ли Кто-Нибудь Мне Помочь?

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

Соединение в докере не удается. Посмотрите мои настройки:

Докерфайл

import mysql.connector

def insert_into_database(data):

print("Salvando no banco de dados")

aux = ""

for i, item in enumerate(data):

if i == len(data)-1:

aux += str(item)

else:

aux += f"{str(item)}, "

try:

connection = mysql.connector.connect(host='localhost',

database='Vestibular',

user='flavio',

password='')

cursor = connection.cursor()

stmt = "SHOW TABLES LIKE 'Candidates'"

cursor.execute(stmt)

result = cursor.fetchone()

mySql_Create_Table_Query = """CREATE TABLE Candidates ( 

Id int(11) AUTO_INCREMENT NOT NULL,

Name varchar(250) NOT NULL,

Score varchar(250) NOT NULL,

PRIMARY KEY (Id)) """

mySql_insert_query = f"""INSERT INTO Candidates (Name, Score) 

VALUES 

{aux}; """

if not result:

cursor.execute(mySql_Create_Table_Query)

cursor.execute(mySql_insert_query)

connection.commit()

print(cursor.rowcount, "Record inserted successfully into Candidates table")

cursor.close()

except mysql.connector.Error as error:

print("Failed to insert record into Candidates table {}".format(error))

finally:

if connection.is_connected():

connection.close()

print("MySQL connection is closed")

docker-compose.yml

   version: '3'

services:

python_app:

build:

context: .

dockerfile: Dockerfile

ports:

- '80:80'

links:

- 'mysql_db'

depends_on:

- mysql_db

networks:

- app-tier

mysql_db:

image: mysql:5.7

ports:

- '3307:3306'

environment: 

MYSQL_ROOT_PASSWORD: 'flavio'

MYSQL_DATABASE: 'Vestibular'

MYSQL_USER: 'flavio'

MYSQL_PASSWORD: ''

networks:

- app-tier

networks:

app-tier:

driver: bridge

db.py

FROM python:3.8.5-alpine

WORKDIR /app

COPY requirements.txt .

RUN python3 -m pip install --upgrade pip

RUN pip install -r requirements.txt

COPY . .

CMD ["python3", "-m", "scraper"]

#docker #docker-compose #dockerfile #python #mysql

Nappisbungutt


Рег
20 Apr, 2004

Тем
77

Постов
194

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

db
and
db
сервисы/контейнеры не используют общее сетевое пространство имен, поэтому они не имеют одинакового
mysql_db
. Just use
localhost
в качестве имени хоста при подключении к БД.

Я бы рекомендовал, чтобы ваш код Python принимал имя хоста БД из аргумента env var или командной строки. Если вы хотите жестко запрограммировать его, вы можете использовать что-то вроде

mysql_db
and then use the docker compose links aliasing feature which is documented здесь нанести на карту
python_app
to the actual service name.

 

Lida_voytenko


Рег
27 Mar, 2009

Тем
87

Постов
168

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

Интересно