【问题标题】:How to files form docker container to host in windows containers如何从 docker 容器中的文件到 Windows 容器中的主机
【发布时间】:2020-07-23 16:52:34
【问题描述】:

我正在学习 docker。在我的图像构建过程中,我在名为“Config”的文件夹中创建了一个名为“appsettings.json”的文件。我希望容器外的用户可以编辑此文件。最终目标是用户可以停止容器、更改设置文件并使用新的设置文件重新启动容器。

我在 Windows 10 主机上使用 Windows 容器。我先创建了一个新卷:

docker volume create myvolume

之后我尝试启动我的容器

docker run -v myvolume:C:/app/Config

但是,-v 参数似乎删除 Config 文件夹中的所有内容。我知道绑定挂载会使用主机上的文件夹覆盖容器中的文件夹,但我认为这个命名卷会将 appsettings 文件复制到主机。

我可以做的是首先创建卷,启动容器并将文件从容器内复制到卷中,但这似乎是一个恼人的矫枉过正。

是否有任何更简单的方法或最佳实践可以使作为构建过程的一部分生成的文件对主机文件系统可见?

【问题讨论】:

  • 我想如果你只是将 Windows 路径挂载到容器路径,比如docker run -v C:/pathonwindows:/pathoncontainer ,它大部分时间都对我有用
  • 不,这不起作用,绑定安装在容器中创建新文件夹,这符合预期。但我认为它应该适用于命名卷。
  • 在这种情况下,您需要在开始时使用脚本填充卷。 Docker 不会自动复制任何数据。
  • 您确定该卷是新鲜的并且从未被任何其他容器使用过吗?您描述的行为应该是正确的。 (另外,你使用的 Dockerfile 可能很方便)

标签: windows docker continuous-integration containers microservices


【解决方案1】:

您不能将文件从主机装载到卷中。就像 cmets 中已经提到的 Pandey Amit 一样,您必须将主机的 Config 目录直接挂载到容器中。要在 Windows 10 中实现这一点,您必须首先在 docker 设置中授予对文件系统的访问权限。

打开 Docker Dashboard -> Settings -> Resources -> FILE SHARING + 在此处添加目录,该目录应该安装在您的 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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-12
    • 2017-05-14
    • 2017-04-06
    • 2017-05-20
    • 1970-01-01
    • 2017-12-29
    • 2014-03-29
    相关资源
    最近更新 更多