我试图将一些服务停靠在我的机器上进行开发,并想知道/functions-project-12345
/lastmodified: 1234567890
/chat
/key-123456
username: "Mat"
text: "Hey Bob!"
/key-123457
username: "Bob"
text: "Hey Mat"
是如何工作的。例如,如果我做了类似
docker run --volume=..
docker run --volume=/path/to/data:/data [...]
是否会在本地(重新)创建 ,如果它不存在?是否从容器的图像中复制了初始数据?
我们将非常感谢与相关文件的链接。
答案 0 :(得分:9)
--volume
中描述了-v
选项,它会将您转到专用的docker run
reference docs文档,然后将您转发到Managed data in containers文档。
在那里,它说:
如果使用
--volume
或-v
绑定安装Docker主机上尚不存在的文件或目录,{{1}}将为您创建端点。它始终作为目录创建。
答案 1 :(得分:3)
是的,主机FS上的目录只有在尚不存在时才会创建。
同时,Docker不会将任何内容从映像复制到bind-mounted卷中,因此挂载路径将在容器内显示为空目录。无论图像中的内容是什么都将被隐藏。
如果您需要复制原始数据,则需要自己实现此功能。幸运的是,这很容易做到。
RUN mv /data /original-data
ADD entrypoint.sh /entrypoint.sh
ENTRYPOINT ['/entrypoint.sh']
脚本entrypoint.sh
可能如下(简化示例):
#!/bin/bash
set -e
SOURCE_DIR=/original-data
TARGET_DIR=/data
if [ $(find $TARGET_DIR -maxdepth 0 -type d -empty) 2>/dev/null) ]; then
cp -r --preserve-all $SOURCE_DIR/* $TARGET_DIR/
fi
# continue Docker container initialization, execute CMD
exec $@
如果您的图片中已有一些入口点脚本,您只需添加适当的逻辑即可。