【发布时间】:2018-09-17 23:37:17
【问题描述】:
我坚持使用 docker 容器部署我的 Django 项目,该项目使用 mySQL 数据库。
我能够创建这两个容器,但 web 容器在创建后立即以代码 1 退出并出现错误 -- Not able to find tg_db database。
我的理解是,当我运行docker-compose up -d 启动两个容器时,它使用MYSQL_DATABASE=tg_db 环境变量创建名为tg_db 的数据库,该数据库由django 设置使用和识别。或者,我可以运行命令docker-compose run web python3 manage.py migrate 来运行 docker-compose,这将在其上创建数据库和迁移。如果这不是真的,请告诉我。
以下是使用的文件:
settings.py:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'tg_db',
'USER': 'root',
'PASSWORD': 'password',
'HOST': 'db',
'PORT': '3306',
'OPTIONS': {'init_command': 'SET default_storage_engine=INNODB;'}
},}
Dockerfile:
# Start with a python image
FROM python:3
# Some stuff that everyone has been copy-pasting
# since the dawn of time.
ENV PYTHONUNBUFFERED 1
# Install things
RUN apt-get update
# Make folders and locations for project
RUN mkdir /code
COPY . /code
WORKDIR /code/project/t_backend
# Install requirements
RUN pip install -U pip
RUN pip install -Ur requirements.txt
Woking 目录设置为 WORKDIR /code/project/t_backend,因为我的 manage.py 坐在那里,Dockerfile 和 docker-compose.yml 文件与项目文件夹位于同一位置。
docker-compose.yml:
version: '3'
services:
db:
image: mysql:latest
restart: always
environment:
- MYSQL_DATABASE=tg_db
- MYSQL_ROOT_PASSWORD=password
volumes:
- ./dbdata:/var/lib/mysql
web:
build: .
command: bash -c "python manage.py runserver 0.0.0.0:8000"
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- db
提前致谢!
【问题讨论】:
-
它似乎只是环境变量中的错字。它是
MYSQL_DATABSE,但应该是MYSQL_DATABASE。 -
@Nickolay:我的错!我纠正了错字.. 但是在构建两个容器后我仍然得到相同的错误。错误是:
_mysql_exceptions.OperationalError: (1049, "Unknown database 'tg_db'")我曾经运行的命令:sudo docker-compose run web python3 manage.py migrate -
@Nickolay 这个问题似乎是无法在
db容器中创建数据库,我不知道如何链接这两个容器,所以这个工作! -
抱歉,不清楚问题是否已解决。
-
@Nickolay 不,问题没有解决。更正
docker-compose中的错字后,我得到了同样的错误。如何在 dockerizing 应用程序时创建数据库。除了上面提到的还有其他步骤吗?
标签: python mysql django docker docker-compose