Django - Mysql数据库不是在Docker中创建的

Rad*_*ico 4 mysql django docker dockerfile docker-compose

我在docker容器中设置了一个django项目,并且每个东西都按预期工作,除了我在mysql映像中找不到项目数据库.

Dockerfile

FROM python:3

RUN mkdir /django-website
WORKDIR /django-website
COPY . /django-website
RUN pip install -r requirements.txt
Run Code Online (Sandbox Code Playgroud)

泊坞窗,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
Run Code Online (Sandbox Code Playgroud)

settings.py

DATABASES = {
    'default': {
        'ENGINE': "django.db.backends.mysql",
        'NAME': "mywebsite",
        'USER': "root",
        'PASSWORD': "root",
        'HOST': 'db',
        'PORT': '3306',
    }
}
Run Code Online (Sandbox Code Playgroud)

我运行迁移,它工作:

docker-compose run web python manage.py migrate
Run Code Online (Sandbox Code Playgroud)

我创建了超级用户:

docker-compose run web python manage.py createsuperuser
Run Code Online (Sandbox Code Playgroud)

开发服务器正在工作docker-compose up,网站正在按预期工作,我在mysql映像中导航的问题我没有找到我的项目相关数据库mywebsite.

你能告诉我缺少什么吗?如果未创建数据库,则应用迁移的位置?

提前致谢.

JPG*_*JPG 5

我不确定你的意思是"我登录了mysql image shell但没找到mywebsite数据库"

您已成功迁移数据库,这意味着数据库连接有效正常工作.

在你的docker-compose.yml文件,端口映射做过这样的,'33060:3306'这意味着在dbport 3306 被映射到主机的port 33060.所以,这可能是问题(这不是问题,有点typo)

如何检查数据库内容?

方法1:检查通过django-shellweb容器
1.运行 2.在同一路径打开一个新的终端,运行 你会得到类似下面docker-compose up
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
Run Code Online (Sandbox Code Playgroud)

3. web通过docker exec -it 795093357f78 bash命令获取容器,其中795093357f78是相应的容器ID
4.现在您在容器内.然后,运行该命令python manage.py dbshell.现在你将在MYSQL shell中mywebsite(截图)
5.运行命令show tables;.它将显示mywebsiteDB

METHOD-2中的db 所有表格:检查容器
1.重复上面第
2 节中的步骤1和2.进入db容器 3.现在你将进入MYSQL的bash终端.运行以下命令并在提示符 4 时输入密码.现在您在MYSQL服务器中.运行命令.这将显示服务器中的所有数据库. docker exec -it 4ae48f291e34 bash
mysql -u root -p
show databases;