我正在尝试将 Windows nanoserver 容器设置为边车容器,其中包含用于 SSL 的证书。因为我需要在每个环境中更改 SSL 证书,所以我需要能够在启动时更改 sidecar 容器(即 dev-cert 容器、prod-cert 容器等)。我已经解决了配置问题,但是在使用与 Linux 容器相同的模式时遇到了问题。
在 linux 容器上,我只需将文件复制到容器中,然后使用 VOLUMES 步骤导出我的卷。然后,在我的主应用程序容器上,我可以使用 volumes_from 从 sidecar 导入卷。
我尝试使用 nanoserver 遵循相同的模式,但无法正常工作。这是我的码头文件:
# Building stage
FROM microsoft/nanoserver
RUN mkdir c:\\certs
COPY . .
VOLUME c:/certs
容器构建得很好,但是当我尝试运行它时出现以下错误。dockerfile 文档说明如下:
基于 Windows 的容器上的卷:使用基于 Windows 的容器时,容器内卷的目标必须是以下之一:
a non-existing or empty directory a drive other than C:
所以我想,简单,我将切换到 D 驱动器(因为我不想像 #1 要求那样导出一个空目录)。我做了以下更改:
# Building stage
FROM microsoft/windowservercore as build
VOLUME ["d:"]
WORKDIR c:/certs
COPY . .
RUN copy c:\certs d:
这个容器实际上是正确启动的。但是,我在文档中错过了 is 说:
从 Dockerfile 中更改卷:如果任何构建步骤在声明卷后更改了卷中的数据,则这些更改将被丢弃。
所以,当我检查时,我在 d:\certs 目录中没有任何文件。
那么如何在windows容器中挂载一个驱动器供外部使用,#1目录必须为空才能在容器中的c驱动器上创建一个VOLUME,并且使用必须使用VOLUME来创建广告驱动器,这是没有意义的,因为任何东西放在那里会不会是在最后的容器里?