我有一个现有的Django Rest项目,带有一个我想进行Dockerize的现有MySQL数据库(名为库)。
我的dockerfile:
FROM python:2.7
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
COPY . /code/
RUN pip install -r requirements.txt
我的 docker 组成:
version: '3'
services:
db:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: libraries
MYSQL_USER: root
MYSQL_PASSWORD: root
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
步骤:
我跑过的
docker-compose build
-构建成功docker-compose up
-必须运行两次此命令,然后我才能通过按localhost:8000 但是,每当我碰到任何API端点时,都会出现错误表“XYZ”不存在。所有表都已经存在。
为什么会这样?
最佳答案
首先,很奇怪,您不得不运行docker-compose up
两次。我建议在第一次运行后运行docker logs
,以查看出了什么问题,然后在需要帮助时提出另一个问题。
关于您的主要问题,请记住Docker容器是无状态的。这意味着除非添加持久卷配置,否则每次启动新容器时都会获得相同的“新鲜”配置。
根据您的撰写文件,有两个容器:一个“web”容器和一个“db”容器。一个新的“db”仅包含一个空的MySQL实例,该实例具有db名称,db用户和db密码设置。里面没有数据。您有两种选择:
migration
以在“db”容器中设置数据库模式。