docker不在运行Django服务器

我是新来的docker工人,我正在试图在docker工作一个Django项目。 我试图从这里按照教程,而不是postgresql,我使用sqlite。 我试图运行docker-compose up但docker被卡在这个: 在这里输入图像说明

我的Dockerfile:

 FROM python:3.6 ENV PYTHONUNBUFFERED 1 RUN mkdir /code WORKDIR /code ADD requirements.txt /code/ RUN pip install -r requirements.txt ADD . /code/ 

和我的docker-compose.yml:

 version: '3' services: db: image: spartakode/sqlite3:latest web: build: . command: python3 manage.py runserver 0.0.0.0:8000 volumes: - .:/code ports: - "8000:8000" depends_on: - db 

谁能帮我这个? 谢谢

你还没有安装任何数据库内的SQLite图像。 sqlite仓库的自述文件说,将数据库安装在容器内的/db/db.db

您可以通过在docker-compose.yml文件中包含卷来完成此操作。 你的新文件应该是这样的:

 version: '3' services: db: image: spartakode/sqlite3:latest volumes: - ./database.db:/db/db.db web: build: . command: python3 manage.py runserver 0.0.0.0:8000 volumes: - .:/code ports: - "8000:8000" depends_on: - db 

Sqlite是python / django直接写入的本地数据库文件,而不是可以连接到的远程数据库服务器。

  • 对于postgres,你会使用一个单独的postgres docker,在你的DATABASES设置中你会有'HOST': 'db'

  • 对于sqlite,你只需要在你的DATABASES设置中有'NAME': 'localfilename.db' 。 SQLite的支持是正确的build立到python,所以你不需要任何额外的软件包。

    你的情况,这意味着你可以从docker-compose.yml删除整个db服务,只留下web服务。

注意:如果你在docker中使用sqlite,你应该确保实际的数据库文件存储在一个卷的某个地方,否则当你的docker停止的时候这个文件会丢失。 在你的情况下,你很好,因为你已经把当前目录挂载在你docker-compose.yml /code 。 数据库文件将在你的/code/localfilename.db里面是/code/localfilename.db在你的本地开发目录中是localfilename.db

作为参考,你的settings.py应该包括这样的东西:

 DATABASES = { 'default': {'ENGINE': 'django.db.backends.sqlite3', 'NAME': 'localfilename.db'}, }