Django - Mysql数据库在Docker中未被创建

11 浏览
0 Comments

Django - Mysql数据库在Docker中未被创建

我在docker容器中建立了一个django项目,一切都如预期工作,只是我没有在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

能否告诉我还缺少什么?如果数据库没有被创建,迁移被应用到哪里了呢?

先感谢了。

admin 更改状态以发布 2023年5月24日
0
0 Comments

你是否尝试在dockerfile中定义数据库镜像?以下链接与你的问题有些关联:
https://medium.com/@lvthillo/customize-your-mysql-database-in-docker-723ffd59d8fb

0
0 Comments

我不确定你的"我在mysql镜像中登录,但是找不到我的网站数据库"是什么意思。

你成功迁移了DB,这意味着DB连接是有效的并且正常工作的。

在你的docker-compose.yml文件中,端口映射是这样的'33060:3306',这意味着db3306端口被映射到主机机器的33060端口。因此,可能会出现这个问题(这不是问题,更像是输入错误)

如何检查DB内容?

方法1:通过web容器的django-shell检查
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.运行命令docker exec -it 795093357f78 bash来进入web容器,其中795093357f78是相对应的容器ID
4. 现在你在容器内部。然后,运行命令python manage.py dbshell。现在你将进入mywebsiteMYSQL shell截图
5. 运行命令show tables;。将显示mywebsite DB内的所有表。

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

0