Импортируйте несколько схем базы данных в MySQL в контейнере Docker - PullRequest
0 голосов
/ 29 мая 2018

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

***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 >> сборка docker-up >> docker-compose exec web bash >> перенос python manage.py (в контейнере docker) при переносе выдается ошибка как (1044, «Доступ запрещен дляпользователь 'pranay' @ '%' к базе данных 'core' ")

1 Ответ

0 голосов
/ 29 мая 2018

Проблема в @ в пароле.Вам нужно экранировать его в 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, в) и «` »(# x60, серьезный акцент) зарезервированы для будущего использования.


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

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

См. Readme для mysql (https://hub.docker.com/_/mysql/):

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...