#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.