如何从 dockerfile 管理文件

How to manage files from dockerfile

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

我有一个 docker 化的 Django 项目,结构如下。

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

出于 post 的目的,我只是写了一个总体结构来了解项目的情况以及我想做什么。

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

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

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

#/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 语句调用此文件,其中 none 有效。我还尝试 运行 来自 Dockerfile 的命令 touch,结果是一样的。

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

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

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