我是码头工人的新手。
我有一个 Microsoft Access 应用程序,它将数据写入 Windows 框中名为 datas.json 的文件中。
此文件 datas.json 由处理它的 node.json 应用程序定期读取。
由于不同的原因,我需要对node.js应用程序进行docker化。
我写了一个 Dockerfile,那部分没问题。
接下来我需要让访问文件在 docker 镜像内写入数据,因为实际上 datas.json 文件位于 docker 镜像内。
我该怎么做? 维护图像内的 datas.json 文件是一个好方法吗? 将 datas.json 放在 docker 镜像之外并从 docker 镜像读取它是否更好(并且可能)?
您可以在 Docker 中从主机文件系统挂载文件或目录。例如,假设 data.json 包含
{"msg": "hi"}
。您可以创建一个容器,在其中与主机文件系统共享:
docker run -it --mount type=bind,source=$PWD/data.json,target=/root/data.json node:slim /bin/bash
这在 Windows 上应该是相同的,但是
source
选项必须是绝对路径,因此将 $PWD
替换为 data.json 所在目录的路径。
这会将 data.json 放在 /root 下,并在容器中打开一个 bash shell。用它来尝试查看 data.json:
root@129e0d705a44:/# cat /root/data.json
{
"msg": "hi"
}
现在在本地文本编辑器中修改文件内容,您将看到容器中 data.json 的内容立即发生变化:
root@129e0d705a44:/# cat /root/data.json
{
"msg": "bye"
}
还有其他挂载选项,请参阅绑定挂载的文档以获取更多信息。
请注意,您无法将绑定挂载添加到 Dockerfile,您必须在启动容器时指定它。 Dockerfile 用于创建与机器无关的 Docker 映像。如果您启动了一个容器并且它可能决定读取文件系统的随机部分,那么从安全角度来看,这会有点可怕。