Docker -Составить ссылку на службу mysql db не работает в flask службе: имя 'mysqldb' не определено - PullRequest
0 голосов
/ 08 января 2020

Мой Docker -компонентный файл выглядит следующим образом: служба web является сервером Flask, а служба mysqldb ссылается на сервер mysql, работающий в отдельном контейнере:

version: '3'

services:

  mysqldb:
    image: mysql:8.0.17
    environment:
      MYSQL_ROOT_PASSWORD: example
      MYSQL_DATABASE: test
      MYSQL_USER: testing
      MYSQL_PASSWORD: testing
    ports:
      - "3308:3306"
  web:
      restart: always
      build:
        context: .
        dockerfile: Dockerfile
      expose:
          - "5000"
      links:
        - mysqldb
      ports:
        - "5000:5000"

Согласно документации, я должен иметь возможность записать mysqldb в мой файл flask -service.py как переменную, подобную этой:

...
import mysql.connector
...
print(mysqldb)
mysqlcnx = mysql.connector.connect(user='testing', password='testing', host= mysqldb, 
                                port = '3306',database='test' )
...

Но вместо этого при запуске docker-compose up --build -d, мои журналы для веб-службы показывают

NameError: name `mysqldb` is not defined

Я просмотрел несколько вопросов о переполнении стека и docker примеров, но не могу найти solid причину, по которой ссылка не работает. Я также попытался импортировать os и вызывать его, как если бы это была переменная окружения, но безрезультатно.

Спасибо.

1 Ответ

1 голос
/ 08 января 2020

Вы пытаетесь сослаться на имя mysqldb как переменную python, которая, конечно, не будет найдена, потому что вы не определили ее нигде в своем коде. Вы сможете подключиться к БД, используя mysqldb в качестве имени хоста, потому что docker -compose устанавливает сеть между сервисами. Поэтому измените строку host= mysqldb на host='mysqldb'

...