从 Windows 访问应用程序定期更新 docker 映像内的文件

问题描述 投票:0回答:1

我是码头工人的新手。

我有一个 Microsoft Access 应用程序,它将数据写入 Windows 框中名为 datas.json 的文件中。

此文件 datas.json 由处理它的 node.json 应用程序定期读取。

由于不同的原因,我需要对node.js应用程序进行docker化。

我写了一个 Dockerfile,那部分没问题。

接下来我需要让访问文件在 docker 镜像内写入数据,因为实际上 datas.json 文件位于 docker 镜像内。

我该怎么做? 维护图像内的 datas.json 文件是一个好方法吗? 将 datas.json 放在 docker 镜像之外并从 docker 镜像读取它是否更好(并且可能)?

node.js windows docker docker-compose dockerfile
1个回答
1
投票

您可以在 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 映像。如果您启动了一个容器并且它可能决定读取文件系统的随机部分,那么从安全角度来看,这会有点可怕。

© www.soinside.com 2019 - 2024. All rights reserved.