代码之家  ›  专栏  ›  技术社区  ›  hkutluay Liam

Docker run volume参数Specify--有关可用选项和命令列表的帮助

  •  0
  • hkutluay Liam  · 技术社区  · 5 年前

    .Net核心控制台应用程序读取主控制台上的配置文件,如下所示。

    static void Main(string[] args)
    {
    
         var configBuilder = new ConfigurationBuilder()
                          .AddJsonFile("//home/processorconfig/appsettings.json");
    
         var configuration = configBuilder.Build();
         ...
    }
    

    当我使用-v参数运行docker映像时

    docker run -v C:\Configs\:/home/processorconfig/ -it  858a565b2069
    

    输出为:

    Specify--help可获得可用选项和命令的列表。

    当我只更改体积参数中的一个字母时,它会运行容器,但应用程序会得到异常

    docker run -v C:\Configs\:/home/processorconfg/ -it  858a565b2069
    

    输出:

    未找到配置文件“processorconfig/appsettings.json” 而且不是可选的。物理路径是 “/home/processorconfig/appsettings.json”。在 重新加载)在 供应商)在

    当我将控制台应用程序AddJsonFile路径更改为另一个路径,然后在运行时将卷添加到该路径时,我得到了相同的输出。

    任何帮助都将不胜感激。

    与相同的结果 --mount 参数

    更新:发现一个线索,当我在C:\Configs中删除appsetings.json时,它运行容器并获取异常消息。

    3 回复  |  直到 5 年前
        1
  •  1
  •   hkutluay Liam    5 年前

    该问题可能与Docker上的文件系统监视不适用于已装入的卷有关。(详情请参阅 aspnet GitHub Docker Forum ).

    File.ReadAllText 命令并将字符串传递给 InMemoryFileProvider 救了我一天。

    var jsonString = File.ReadAllText("//home/processorconfig/appsettings.json");
    var memoryFileProvider = new InMemoryFileProvider(jsonString);
    var configuration = new ConfigurationBuilder()
        .AddJsonFile(memoryFileProvider, "appsettings.json", false, false)
        .Build();
    
        2
  •  0
  •   hkutluay Liam    5 年前

    路径中的冒号可能有问题。我不在windows计算机上,因此无法验证。尝试使用 --mount 语法:

    docker run --mount type=bind,source=C:\Configs\,target=/home/processorconfig/ -it  858a565b2069
    
        3
  •  0
  •   Carlos Jafet Neto    5 年前

    docker run -v $(pwd):/home/processorconfig/ -it  858a565b2069