我在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
的问题。
您能告诉我缺少什么吗?如果未创建数据库,则在哪里应用迁移?
谢谢。
答案 0 :(得分:5)
我不确定您是什么意思 “我登录了mysql映像外壳程序,但未找到mywebsite数据库”
您已成功迁移数据库,这意味着数据库连接是 有效 和有效。
在您的 docker-compose.yml
文件中,端口映射如下完成: '33060:3306'
,即 db
的port 3306
映射到主机的port 33060
。因此,此 可能是个问题(这不是问题,typo
种)
METHOD-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
是相应的容器ID
4.现在您在容器内。然后,运行命令 python manage.py dbshell
。现在,您将进入mywebsite
(Screenshot)的 MYSQL shell中。
5.运行命令show tables;
。它将显示mywebsite
数据库中的所有表
METHOD-2:通过db
容器进行检查
1.重复以上部分中的步骤1和2
2.通过 db
进入docker exec -it 4ae48f291e34 bash
容器
3.现在,您将进入MYSQL的bash终端。运行以下命令 mysql -u root -p
并在出现提示时输入密码
4.现在您在MYSQL服务器中。运行 show databases;
命令。这将显示服务器中的所有数据库。
答案 1 :(得分:2)
您是否尝试过在dockerfile中定义数据库映像?以下链接与您的问题有些相关: https://medium.com/@lvthillo/customize-your-mysql-database-in-docker-723ffd59d8fb
答案 2 :(得分:0)
我认为主机容器的端口值应该是3306,而不是33060。 使用值3306的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:
- '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
希望这行得通!
答案 3 :(得分:0)
您应该将撰写规范更改为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
可以为您提供很多有关原因的信息。