Django + Docker + SQLite3 如何将数据库挂载到容器中?

Django + Docker + SQLite3 How to mount database to the container?

我的本地主机上有带有某种表格的 sqlite 数据库,我想将该数据库复制并粘贴到 运行 在 docker 上的服务器。我创建了这样的路径:

db_data: 我想在我的 django 项目中 运行 我的 sqlite 数据库。 web: 有我的整个 django 项目

在我的 docker-compose.yml 我写了这一卷:

version: "3"

services:

  web:
    build: ./web/
    ports:
      - "8001:8001"
    volumes:
      - ./web:/code
      - /home/cosmo/db_data/db.sqlite3:/code/db.sqlite3
    command: python manage.py runserver 0.0.0.0:8001

所以我认为 docker 会在我的 db_data 中获取数据库,并会在我的 Web 文件夹中生成卷(在我的项目中。我的本地主机上有数据库,所以这不会有问题。 ) 但是我会在这里粘贴 settings.py:

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))


# Database
# https://docs.djangoproject.com/en/2.0/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

所以当我在 db_data 中打开我的 db.sqlite3 时,每个表和内容都在那里,但是当我 运行 容器时,我的项目文件夹 (web) 中的 db.sqlite3 是空的.

当我执行 运行 docker ps 命令时,没有数据库容器,也许这是我不知道的问题。我只有:

红圈内是我的django容器。因此,当我 运行 我的服务器并尝试登录数据库中的每个帐户时,都是未知的。所以我认为容器与我项目中的那个空数据库一起工作。有人请有什么解决办法吗?谢谢。

  1. BASE_DIR就是设置文件的文件夹,一般在根目录下。很可能你有一个目录问题。如果您可以将文件直接移动到与 settings.py 相同的文件夹中,您至少可以消除这些变量。
  2. 你不会看到容器,它只是绑定了一个卷,你也应该使它独一无二所以不要像你有的那样嵌套它 /code/db.sqlite3 而是把它放在它自己的文件夹中然后你可以参考在您的设置文件中。您可以使用 docker volume ls 查看卷列表(假设 Docker 1.8+)