Импортируйте несколько схем базы данных в MySQL в контейнере Docker

0

хотите загрузить несколько схем базы данных, используя backup.sql. Затем, когда вы пытаетесь перенести показ (1044, "Доступ запрещен для пользователя" pranay '@'% 'к ядру базы данных'), я добавил моментальный снимок моих файлов для справки

***docker-compose.yml***
version: '3'
services:
db:
image: mysql:5.7
container_name: mirror_core
volumes:
  - ./mirror/core.sql:/docker-entrypoint-initdb.d/core.sql:rw
  - ./mysql:/var/lib/mysql:rw
expose:
  - "3306"
restart: always
environment:
  - MYSQL_ROOT_PASSWORD=mobigo@123
  - MYSQL_USER=pranay
  - MYSQL_PASSWORD=mobigo@123
web:
build: .
container_name: mirrorweb
command: bash -c "python manage.py collectstatic --no-input && gunicorn mirror.wsgi -b 0.0.0.0:8000"
links:
  - db
volumes:
  - ./mirror:/mirror
expose:
  - "8000"
depends_on:
  - db

core.sql

CREATE DATABASE  'core' ;
CREATE DATABASE  'murad' ;
CREATE DATABASE  'mysqltest' ;

settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'core',
        'USER':'pranay',
        'PASSWORD':'mobigo@123',
        'HOST':'db',
        'PORT':'',
    }
}

шаги заключаются в следующем: docker-compose build >> docker-compose up >> docker-compose exec web bash >> python manage.py migrate (в контейнере докера) при миграции получить ошибку как (1044, "Запрет доступа для пользователя" pranay '@'% 'в базу данных' core '')

Теги:
docker
docker-compose

1 ответ

0

Проблема заключается в @ в пароле. Вам нужно сбежать от него в docker-compose.yml. Python использует пароль с @123, а compose обрабатывает его по-разному и, следовательно, не является правильным паролем, который вы настроили для mysql.

Проверьте переменную env в контейнере, чтобы получить то, что написано на самом деле, как пароль.

Для справки см.:

https://symfony.com/doc/current/components/yaml/yaml_format.html:

Строки, содержащие любой из следующих символов, должны быть указаны. Хотя вы можете использовать двойные кавычки, для этих символов удобнее использовать одинарные кавычки, что позволяет избежать любой обратной косой черты:

:, {,}, [,],, &, *, #,?, |, -, <,>, =,!,%, @, '

http://yaml.org/spec/1.2/spec.html#id2772075:

"@" (# X40, at) и "" (# x60, серьезный акцент) зарезервированы для будущего использования.


Возможно, возможно, но менее вероятно:

Это происходит из-за того, что, когда web службы выполняет команду python, служба mysqldb в db еще не настроена.

См. Mysql docker readme (https://hub.docker.com/_/mysql/):

Нет соединений до завершения инициализации MySQL

Если база данных не инициализируется при запуске контейнера, будет создана база данных по умолчанию. Хотя это ожидаемое поведение, это означает, что он не будет принимать входящие соединения, пока эта инициализация не завершится. Это может вызвать проблемы при использовании инструментов автоматизации, таких как сборка докеров, которые запускают несколько контейнеров одновременно.

Попробуйте запустить db-службу (docker-compose up db) и дать ей несколько секунд, а затем попытаться запустить веб-службу.

Директива depends_on только ожидает запуска контейнера - докер не знает, когда служба внутри контейнера будет "готова" - разработчик должен реализовать это самостоятельно. Обычно вы просто устанавливаете веб-контейнер для запуска снова и снова, пока он, наконец, не удастся (db будет готов).

Кроме того, как ни менее рекомендуется, просто дайте sleep 10 прежде чем выполнять сценарий миграции.

  • 0
    Я изменил пароль, удалил '@', а также сначала запустил db, а затем web, теперь при миграции я получаю django.db.utils.OperationalError: (1130, «Хосту 172.24.0.3» не разрешено подключаться к этому MySQL server "), но я нигде не использовал этот IP в своем проекте
  • 0
    Это IP-адрес web контейнера. Вам нужно разрешить в БД для пользователя подключаться с любого хоста, а не только с «localhost», как это обычно используется в базах данных по умолчанию. В образах докеров другие сервисы всегда подключаются извне с точки зрения базы данных.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню