Django - Mysql数据库在Docker中未被创建
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
。
能否告诉我还缺少什么?如果数据库没有被创建,迁移被应用到哪里了呢?
先感谢了。
你是否尝试在dockerfile中定义数据库镜像?以下链接与你的问题有些关联:
https://medium.com/@lvthillo/customize-your-mysql-database-in-docker-723ffd59d8fb
我不确定你的"我在mysql镜像中登录,但是找不到我的网站数据库"是什么意思。
你成功迁移了DB,这意味着DB连接是有效的并且正常工作的。
在你的docker-compose.yml
文件中,端口映射是这样的'33060:3306'
,这意味着db
的3306
端口被映射到主机机器的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
。现在你将进入mywebsite
的MYSQL 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;
。这将显示服务器中的所有数据库。