0

我在 docker 中有一个项目,我一直在努力从 dockerfile o docker-compose 文件中生成一些文件。

我有一个具有以下结构的 dockerized Django 项目。

assets/
app/
db/
  .gitignore (ignoring all files of the folder)
  db.sqlite3
docker-compose.yml
Dockerfile

为了这篇文章的目的,我只是写了一个通用结构来说明项目的情况以及我想做什么。

我试图做的是将数据库文件挂载为一个卷(类型:绑定)但没有用。我所做的是将文件夹 db 视为卷文件夹。直到这里一切正常。

我想要做的是在不存在时生成 db.sqlite3 文件,运行迁移并运行命令 python manage.py collectstatic --noinput。

我尝试创建一个入口点文件:

#/bin/sh
python manage.py collectstatic --noinput

db=/code/db/db.sqlite3
if [ ! -f  "$db" ]; then
    touch "$db"
fi

python manage.py migrate

我尝试在 Dockerfile 中使用 ENTRYPOINT 和 CMD 语句调用此文件,但它们都不起作用。我还尝试从 Dockerfile 运行命令 touch,结果是一样的。

4

1 回答 1

1

如果您的容器有入口点,那么当该入口点退出时,容器已完成并docker ps显示“已退出”状态。如果它也有命令,入口点需要负责运行它。最常见的方法是将其作为入口点脚本的最后一行运行

#!/bin/sh
...
exec "$@"

您在问题中显示的入口点缺少此行,因此您的容器仅运行初始设置和迁移,但随后退出而不是实际启动服务器。

于 2020-02-21T10:06:18.487 回答