我正在学习docker。在我的映像构建过程中,我在名为“ Config”的文件夹中创建一个名为“ appsettings.json”的文件。我希望容器外部的用户可以编辑此文件。最终目标是用户可以停止容器,更改设置文件并使用新的设置文件再次启动容器。
我正在Windows 10主机上使用Windows容器。我首先创建了一个新卷:
docker volume create myvolume
之后,我尝试启动容器
docker run -v myvolume:C:/app/Config
但是,似乎-v参数删除了 Config文件夹中的所有内容。我知道绑定安装会使用主机上的文件夹覆盖容器中的文件夹,但是我认为此命名卷会将appsettings文件复制到主机上。
我能做的就是首先创建卷,启动容器并将文件从容器内复制到卷中,但这似乎是一个令人讨厌的过大杀伤力。
是否有更简便的方法或最佳实践来使生成过程中生成的文件对主机文件系统可见?
答案 0 :(得分:2)
您无法将主机中的文件装载到卷中。就像注释中已经提到的Pandey Amit一样,您必须将主机的Config目录直接安装到容器中。要在Windows 10中实现此目的,您必须首先在docker设置中授予对文件系统的访问权限。
打开Docker Dashboard->设置->资源->文件共享+在此处添加目录,该目录应安装在Docker容器中(仅供参考:包括所有子目录)
我建议重新启动docker本身,以记下新设置。
一旦docker重新启动,运行您的容器:
docker run -v C:/app/Config:/path/to/your/app/Config <image-name>
这会将C:\ app \ Config的内容装载到容器中,现在,即使不必重新启动容器,您也应该能够修改appsettings.json的内容(但这取决于应用程序的体系结构- >如果支持实时重载appsettings.json)
更新:您无法将Docker映像中的文件挂载到主机上。如果需要,可以指示用户在主机上手动创建文件,然后执行上述步骤。但是,如果您要实现的唯一目的就是允许用户覆盖应用程序设置,那么我建议您使用环境变量。例如,从主机上运行具有覆盖设置的容器:
docker run -e "foo=bar" <image-name>