Django - База данных Mysql не создается в Docker - PullRequest
0 голосов
/ 22 сентября 2018

Я установил проект django в Docker-контейнере, и все работает должным образом, за исключением того, что я не нахожу базу данных проекта в изображении mysql.

Dockerfile

FROM python:3

RUN mkdir /django-website
WORKDIR /django-website
COPY . /django-website
RUN pip install -r requirements.txt

docker-compose.yml

version: '3'

services:
    db:
        image: mysql:5.7
        restart: always
        environment:
            - MYSQL_ROOT_PASSWORD=root
            - MYSQL_DATABASE=mywebsite
            - MYSQL_USER=root
            - MYSQL_PASSWORD=root
        ports:
            - '33060:3306'
        volumes:
            - /var/lib/mysql
    web:
        build: .
        command: python manage.py runserver 0.0.0.0:8000
        volumes:
            - .:/django-website
        ports:
            - '8000:8000'
        links:
            - db

settings.py

DATABASES = {
    'default': {
        'ENGINE': "django.db.backends.mysql",
        'NAME': "mywebsite",
        'USER': "root",
        'PASSWORD': "root",
        'HOST': 'db',
        'PORT': '3306',
    }
}

Я запустил миграцию, и она заработала:

docker-compose run web python manage.py migrate

Я создал суперпользователя:

docker-compose run web python manage.py createsuperuser

Сервер разработки работает docker-compose up, а сайт работаетработает, как ожидалось, проблема, когда я перемещаюсь в изображении mysql, я не нахожу связанную с моим проектом базу данных, которая является mywebsite.

, не могли бы вы сказать мне, чего не хватает?если база данных не создана, где применяется миграция?

Заранее спасибо.

Ответы [ 4 ]

0 голосов
/ 26 сентября 2018

Я не уверен, что вы подразумеваете под "Я вошел в оболочку изображения mysql, но не нашел базу данных моего сайта"

Вы перенесли базу данныхуспешно, что означает, что соединения с БД действительны и работают .

В вашем файле docker-compose.yml,сопоставление портов выполняется следующим образом: '33060:3306', что означает, что db port 3306 сопоставляется с port 33060 хост-машины.Итак, эта может быть проблемой (это не проблема, вроде typo)

Как проверить содержимое БД?

МЕТОД-1: проверить через django-shell из web контейнер
1. запустить docker-compose up
2. открыть новый терминалпо тому же пути и запустите docker ps
, вы получите что-то вроде ниже

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                     NAMES
795093357f78        django_1_11_web     "python manage.py ru…"   34 minutes ago      Up 11 minutes       0.0.0.0:8000->8000/tcp    django_1_11_web_1
4ae48f291e34        mysql:5.7           "docker-entrypoint.s…"   34 minutes ago      Up 12 minutes       0.0.0.0:33060->3306/tcp   django_1_11_db_1

3.Войдите в контейнер web с помощью docker exec -it 795093357f78 bashКоманда , где 795093357f78 - соответствующий идентификатор контейнера
4. Теперь вы находитесь внутри контейнера.Затем выполните команду python manage.py dbshell.Теперь вы будете в оболочке MYSQL mywebsite ( Снимок экрана )
5. Запустите команду show tables;.В нем будут отображаться все таблицы внутри mywebsite DB

МЕТОД-2: проверка через db контейнер
1. повторите шаги 1 и 2 в разделе выше
2. попасть в db контейнер по docker exec -it 4ae48f291e34 bash
3. Теперь вы будете в bash-терминале MYSQL.Выполните следующую команду mysql -u root -p и введите пароль при появлении запроса
4. Теперь вы находитесь на сервере MYSQL.выполните команду, show databases;.Это покажет все базы данных на сервере.

0 голосов
/ 25 сентября 2018

Я предполагал, что значение портов хост-контейнера должно быть 3306, а не 33060. Используйте docker-compose.yml со значением 3306:

version: '3'

services:
    db:
        image: mysql:5.7
        restart: always
        environment:
            - MYSQL_ROOT_PASSWORD=root
            - MYSQL_DATABASE=mywebsite
            - MYSQL_USER=root
            - MYSQL_PASSWORD=root
        ports:
            - '3306:3306'
        volumes:
            - /var/lib/mysql
    web:
        build: .
        command: python manage.py runserver 0.0.0.0:8000
        volumes:
            - .:/django-website
        ports:
            - '8000:8000'
        links:
            - db

Надеюсь, это сработает!

0 голосов
/ 25 сентября 2018

Вы должны изменить составную спецификацию на version '2'.Уберите контейнер и верните его обратно с docker-compose up -d.Или, если вы намереваетесь остаться с версией 3, вместо этого вы можете использовать следующую спецификацию для параметров среды базы данных

```
  environment:
    MYSQL_ROOT_PASSWORD: root
    MYSQL_DATABASE: mywebsite
    MYSQL_USER: root
    MYSQL_PASSWORD: root
```

Если у вас есть проблемы с контейнерами, не подходящими, docker logs <container-name> --tail 25 -f может дать вам много информациио причине.

0 голосов
/ 22 сентября 2018

Вы пытались определить образ базы данных в файле Docker?Следующая ссылка в некоторой степени связана с вашей проблемой: https://medium.com/@lvthillo/customize-your-mysql-database-in-docker-723ffd59d8fb

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