我有一个现有的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

    但是,每当我碰到任何API端点时,都会出现错误表“XYZ”不存在。所有表都已经存在。

    为什么会这样?

    最佳答案

    首先,很奇怪,您不得不运行docker-compose up两次。我建议在第一次运行后运行docker logs,以查看出了什么问题,然后在需要帮助时提出另一个问题。

    关于您的主要问题,请记住Docker容器是无状态的。这意味着除非添加持久卷配置,否则每次启动新容器时都会获得相同的“新鲜”配置。

    根据您的撰写文件,有两个容器:一个“web”容器和一个“db”容器。一个新的“db”仅包含一个空的MySQL实例,该实例具有db名称,db用户和db密码设置。里面没有数据。您有两种选择:

  • 从“Web”容器中运行migration以在“db”容器中设置数据库模式。
  • 如果您的本地/开发设置中有一些数据并且要使用它们,请考虑从本地设置备份这些数据,然后将其还原到“db”容器中。如果您不知道如何操作,请查阅MySQL文档以了解如何备份数据,并查阅MySQL docker hub的“初始化新实例”部分以了解如何使用某些数据启动新的“db”容器。
  • 10-07 18:58
    查看更多