2017-03-03 1057 views
4

我在Docker容器中运行.net核心应用程序。这里是我的泊坞窗文件(只是建立一个开发环境):用于Docker中的.NET Core应用程序的appSettings.json?

FROM microsoft/dotnet:1.0.1-sdk-projectjson 
ENV ASPNET_ENV Development 
COPY bin/Debug/netcoreapp1.0/publish/ /root/ 
EXPOSE 5000/tcp 
ENTRYPOINT dotnet /root/AVP.WebApi.dll 

我在/出版/文件夹中的文件appSettings.Development.json。如果我构建并运行这个Docker文件,最终会出现一个奇怪的问题,.NET应用程序无法找到它需要启动的appsetting(它们位于appSettings.Development.json文件中)。

我已经确认,从Windows命令行运行dotnet publish/AVP.WebAPI.dll时,该应用程序会抛出相同的例外情况,导致缺少配置设置。但是,如果我cd /发布和运行dotnet AVP.WebAPI.dll该应用程序启动并运行得很好。

任何想法如何更改我的docker文件,以便它将appSettings.Development.json值正确运行应用程序? (我也试图运行应用程序与所有值复制到常规appSettings.json文件没有运气)

我也尝试运行COPY命令/ /而不是/ root和做dotnet AVP .WebApi.dll作为入口点,但是导致项目无法找到依赖关系。

回答

2

作为后续给大家(我张贴这是一条评论原本),这是结束了修复它:

从我可以告诉它看起来像dotnet期望appsettings文件在它运行的同一目录中。因此,我将COPY bin/Debug/netcoreapp1.0/publish/appsettings.json /appsettings.json添加到dockerfile中(该行将appsettings文件复制到/ root /复制发布文件夹的目录下)。一切都开始在这一点上工作。看起来,dotnet可执行文件从/ root /下的目录运行,所以以前找不到它,现在appsettings位于同一个文件夹中,它很高兴。

+0

您也可以通过向您的csproj文件添加“CopyToPublishDirectory”来解决此问题。这在这里讨论:https://stackoverflow.com/questions/37858312/dotnet-publish-doesn%C2%B4t-publish-correct-appsettings-env-environmentname-json – shiitake

0

有三个问题,我能想到的为什么不能找到的AppSettings:

  1. 他们不是在正确的文件夹中的容器(你复制发布文件夹并没有发布文件夹包含在appsetting
  2. 你没有定义使用的AppSettings在StartupClass环境:appSettings.${Environment}.json
  3. 它的工作原理,因为本地文件系统的窗户是不区分大小写的,而Linux是大小写敏感的,因此它无法找到该文件(检查大写)
+0

我拷贝整个发布文件夹,发布文件夹确实包含appsettings和appsettings开发文件。 从我可以告诉它看起来像dotnet期望appsettings文件在它运行从同一个目录,当我添加COPY bin/Debug/netcoreapp1.0/publish/appsettings.json /appsettings.json到dockerfile (该行将appsettings文件复制到/ root /复制发布文件夹所在的目录中),所有事情都开始工作。 –

5

尝试更换这行:

ENV ASPNET_ENV Development 

这一点:在旧的.NET核心采用

ENV ASPNETCORE_ENVIRONMENT Development 

你原来的环境变量的名字,但已被更改。它可能是一个痛苦的研究教程,等等的.NET核心,因为它从第一次开始以来发生的所有变化!

不要让我开始在project.json文件!

更多信息:

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration https://docs.microsoft.com/en-us/aspnet/core/fundamentals/environments

0

刚刚遇到这个问题我自己和问题是文件没有被默认复制。

这是固定通过编辑的.csproj文件并添加:右键

<ItemGroup> 
    <None Update="appsettings.json"> 
     <CopyToOutputDirectory>Always</CopyToOutputDirectory> 
    </None> 
    </ItemGroup> 

这也可以通过用户界面来完成点击AppSettings的Visual Studio中的文件,选择属性和设置sopy以目录为“Always ”。

相关问题