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

时间:2018-03-21 13:56:08

标签: django sqlite docker mount

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

enter image description here

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文件夹中创建卷(在我的项目中。我在我的localhost上有数据库所以它不会有问题。)但是我会在这里粘贴设置的.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命令时,没有数据库容器可能这是我不知道的问题。我只有那里:

enter image description here

红色圆圈中的

是我的django容器。因此,当我将运行我的服务器并尝试从数据库登录每个帐户是未知的。所以我认为容器在我的项目中使用那个空数据库。有人请问有什么解决方案吗?感谢。

1 个答案:

答案 0 :(得分:3)

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