Не могу подключиться к MySQL серверу на БД. имя или сервер не указаны или не известны с использованием Docker - PullRequest
1 голос
/ 24 апреля 2020

Я пытаюсь подключить свое приложение к моей mysql базе данных, которую я запустил и запускаю в docker -композитном файле. Я использую flask и пытаюсь подключиться с помощью DBUtils. Я получаю сообщение об ошибке, описанное в моем заголовке:

(py mysql .err.OperationalError: (2003, "Не удается подключиться к MySQL сервер на 'db' ([имя_сервера 8] не указано или не указано имя узла или имя сервера) "))

Я пытался использовать IP-адреса моих экземпляров docker, а также несколько других решений в аналогичные проблемы, обсуждаемые здесь в StackOverflow: Docker -Compose не может подключиться к MySQL
Подключение к MySQL из Flask приложения с использованием docker -compose .

однако предлагаемые решения, похоже, не работают для меня.

мой docker -компонентный файл выглядит следующим образом:

version: '3.3'

services:
  db:
    image: mysql:8.0
    container_name: mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 'myPassword'
      MYSQL_DATABASE: 'databaseName'

    volumes:
      - .:/dockerFiles

    ports:
      - "3306:3306"
    expose:
      - "3306"

phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: phpmyadmin

    restart: always

    ports:
      - "8080:80"
    volumes:
      - /sessions

и моя строка подключения выглядит следующим образом:

def connect_db():
# Connects to the database and takes care of the connection
return PersistentDB(
    creator=pymysql, host='db',
    user='root', password='myPassword', database='databaseName', port=3306,
    autocommit=True, charset='utf8mb4',
    cursorclass=pymysql.cursors.DictCursor)

1 Ответ

0 голосов
/ 27 апреля 2020

Ошибка [Errno 8] nodename nor servname provided, or not known утверждает, что не может найти сервер базы данных. Таким образом, host='db' будет работать, только если ваш код Python находится внутри docker в той же сети службы базы данных db. Попробуйте добавить службу для кода Python в свой docker -компонент:

version: '3.3'

services:
  db:
    image: mysql:8.0
    container_name: mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 'myPassword'
      MYSQL_DATABASE: 'databaseName'
    volumes:
      - .:/dockerFiles
    ports:
      - "3306:3306"
    expose:
      - "3306"

  web:
    build: . # where is your dockerfile
    command: sh -c 'python app.py' # this should be the command to start your application
    ports:
     - "8082:8082"
    volumes:
     - .:/code # it depends on the WORKDIR of your dockerfile
    links:
     - db
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...