如何从 docker 容器上的代码访问 docker 卷文件

How ro access docker volume files from the code on docker container

我已经用这样的命令创建了一个 docker 卷

docker run -ti --rm -v TestVolume1:/testvolume1 ubuntu

然后我在那里创建了一个名为 TestFile.txt 的文件并向其中添加了文本

我还有一个带有 Dockerfile 的简单“Hello world”.net 核心应用程序

FROM mcr.microsoft.com/dotnet/aspnet:6.0
COPY bin/Release/net6.0/publish/ ShareFileTestInstance1/
WORKDIR /ShareFileTestInstance1
ENTRYPOINT ["dotnet", "ShareFileTestInstance1.dll"]

我使用

发布了它
dotnet publish -c Release

然后运行

docker build -t counter-image -f Dockerfile .

终于执行了

docker run -it --rm --name=counter-container counter-image -v TestVolume1:/testvolume1 ubuntu

到 运行 我的应用 docker 音量

所以我想要从容器中的代码访问卷中的文件(在我的例子中是“TestFile.txt”)。

例如

Console.WriteLine(File.Exists("WHAT FILE PATH HAS TO BE HERE") ? "File exists." : "File does not exist.");

是否也可以将所有这些东西组合到一个 Dockerfile 中?我想接下来再添加一个容器并连接到卷以在那里保存数据。

docker run 的参数可以是 docker 的参数,也可以是 docker 容器中程序 运行 的参数。 docker 的参数在之前 图像名称和容器中程序的参数在之后 图像名称。

卷映射是 docker 的一个参数,因此它应该位于图像名称之前。所以而不是

docker run -it --rm --name=counter-container counter-image -v TestVolume1:/testvolume1 ubuntu

你应该做

docker run -it --rm --name=counter-container -v TestVolume1:/testvolume1 counter-image 

当您这样做时,您的程序应该可以在 /testvolume1/TestFile.txt.

访问您的文件

无法按照您的要求在 Dockerfile 中进行映射。 docker 主机到 docker 主机的映射可能不同,因此需要在 run-time.

处指定它们