rak*_*ian 5 docker dockerfile docker-compose docker-volume persistent-volumes
docker-compose文件如下:
version: "3"
services:
backend:
build:
context: .
dockerfile: dockerfile_backend
image: backend:dev1.0.0
entrypoint: ["sh", "-c"]
command: python manage.py runserver
ports:
- "4000:4000"
Run Code Online (Sandbox Code Playgroud)
docker 构建会创建一个文件夹,/docker_container/configs其中包含config.json和 等文件db.sqlite3。将此文件夹安装为卷是必要的,因为在运行时文件夹的内容会被修改或更新,这些更改不应丢失。
我尝试添加卷如下:
volumes:
- /host_path/configs:/docker_container/configs
Run Code Online (Sandbox Code Playgroud)
这里的问题是主机路径(/host_path/configs)的挂载点最初是空的,因此容器映像文件夹(/docker_container/configs)也变空了。这个问题怎么解决呢?
您可以通过将图像中的内容复制到目录来预先填充主机目录。
docker run --rm backend:dev1.0.0 tar -cC /docker_container/config/ . | tar -xC /host_path/configs
Run Code Online (Sandbox Code Playgroud)
然后按原样启动您的撰写项目,并且主机路径已经具有图像中的原始内容。
另一种方法是使用入口点脚本将内容复制到已安装的卷。
您可以将主机路径安装到不同的路径(例如/docker_container/config_from_host),并拥有一个入口点脚本,如果目录为空,则该脚本将内容复制到/docker_container/configs其中。/docker_container/config_from_host
伪代码示例:
$ cat Dockerfile
RUN cp entrypoint.sh /entrypoint.sh
CMD /entrypoint.sh
$ cat entrypoint.sh:
#!/bin/bash
if /docker_container/config_from_host is empty; then
cp -r /docker_container/config/* /docker_container/config_from_host
fi
python manage.py runserver
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2178 次 |
| 最近记录: |