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

ida*_*ure 5 sqlite django mount docker

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

在此处输入图片说明

db_data:有我想在django项目中运行的sqlite数据库。 网址:这是我的整个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
Run Code Online (Sandbox Code Playgroud)

因此,我认为docker将在我的db_data中获取数据库并在我的Web文件夹中创建卷(在我的项目中。我在localhost上有数据库,因此不会有问题。)但我将在此处粘贴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'),
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

在此处输入图片说明

红色圆圈中是我的django容器。因此,何时运行服务器并尝试从数据库登录每个帐户是未知的。因此,我认为容器可以与我项目中的空数据库一起使用。有人有什么解决办法吗?谢谢。

sto*_*ter 4

  1. BASE_DIR 将是设置文件的文件夹,通常位于根文件夹中。很可能您遇到了目录问题。如果您可以将文件直接移动到与 settings.py 相同的文件夹中,您至少可以消除这些变量。
  2. 您不会看到容器,它只是绑定一个卷,您还应该将其设置为唯一,因此不要像以前那样嵌套它,/code/db.sqlite3而是将其放在自己的文件夹中,然后您可以在设置文件中引用它。您可以使用以下命令查看卷列表docker volume ls(假设 Docker 1.8+)