Как задать путь к файлу appsetting.json в DockerFile в проекте IoT Edge Runtime

#c# #docker #.net-core #dockerfile #azure-iot-edge

#c# #docker #.net-ядро #dockerfile #azure-iot-edge

Вопрос:

Я создал один проект пользовательского модуля IOT edge runtime в контейнере Windows. Во время выполнения решения, с которым я сталкиваюсь, система не может найти указанный файл. Я передаю значения из файла appsetting.json, и при запуске модуля путь не указывается.

Могу ли я каким-то образом дать какую-либо команду для копирования файла appsetting.json в контейнер при создании образа.

Это файл Dockerfile, который я использую:

 FROM mcr.microsoft.com/dotnet/core/sdk:3.1-nanoserver-1809 AS build-env
WORKDIR /app

COPY *.csproj ./
COPY appsettings.json ./
RUN dotnet restore

COPY . ./
RUN dotnet publish -c Release -o out

FROM mcr.microsoft.com/dotnet/core/runtime:3.1-nanoserver-1809
WORKDIR /app
COPY --from=build-env /app/out ./
ENTRYPOINT ["dotnet", "project.dll"]
 

Это файл cs.proj

 <Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.1</TargetFramework>
  </PropertyGroup>
  
  <PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Debug|netcoreapp3.1|AnyCPU'">
    <TreatWarningsAsErrors>True</TreatWarningsAsErrors>
    <TreatSpecificWarningsAsErrors />
  </PropertyGroup>

  <ItemGroup>
    <ProjectCapability Include="AzureIoTEdgeModule" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.Azure.Devices.Client" Version="1.*" />
    <PackageReference Include="System.Runtime.Loader" Version="4.3.0" />
  </ItemGroup>

  <ItemGroup>
    <Reference Include="SasLib">
      <HintPath>libSasLib.dll</HintPath>
    </Reference>
  </ItemGroup>

  <ItemGroup>
    <Compile Update="ResourceResource.Designer.cs">
      <DesignTime>True</DesignTime>
      <AutoGen>True</AutoGen>
      <DependentUpon>Resource.resx</DependentUpon>
    </Compile>
  </ItemGroup>

  <ItemGroup>
    <EmbeddedResource Update="ResourceResource.resx">
      <Generator>ResXFileCodeGenerator</Generator>
      <LastGenOutput>Resource.Designer.cs</LastGenOutput>
    </EmbeddedResource>
  </ItemGroup>
</Project>
 

Комментарии:

1. Покажите нам содержимое вашего файла csproj

2. Я добавил, пожалуйста, проверьте.

Ответ №1:

попробуйте указать папку в контейнере Windows, куда должен быть скопирован файл appsettings.json

 COPY appsettings.json c:/temp/
 

Комментарии:

1. Должен ли я включить его в dockerfile?

2. Вот синтаксис команды с официального сайта COPY test.txt /absoluteDir/ , может быть, точку перед каталогом указывать не нужно? и The example below uses a relative path, and adds “test.txt” to <WORKDIR>/relativeDir/: COPY test.txt relativeDir/ Whereas this example uses an absolute path, and adds “test.txt” to /absoluteDir/ COPY test.txt /absoluteDir/

Ответ №2:

Кажется, что appsettings.json не копируется в выходной каталог. Попробуйте добавить это в файл csproj

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

Комментарии:

1. @ArshitSingh не работает, почему? есть ошибки? неправильное поведение? не могли бы вы описать?

2. Спасибо за вашу помощь, теперь она работает, я добавил команду копирования в dockerfile.