#linux #docker #asp.net-core #docker-compose #dockerfile
#linux #docker #asp.net-core #docker-compose #dockerfile
Вопрос:
Я пытаюсь запустить asp.net основное приложение в контейнере docker, для которого я создал требуемый Dockerfile. Я также интегрировал модульные тесты и покрытие кода в Dockerfile для того же самого.
Вот мой Dockerfile :
FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM microsoft/dotnet:2.2-sdk AS build
WORKDIR /src
COPY Demo.API/Demo.API.csproj Demo.API/
RUN dotnet restore Demo.API/Demo.API.csproj
COPY . .
WORKDIR /src/Demo.API
RUN dotnet build Demo.API.csproj -c Release -o /app
FROM build as unittest
WORKDIR /src
COPY Demo.UnitTests/Demo.UnitTests.csproj Demo.UnitTests/
RUN dotnet restore Demo.UnitTests/Demo.UnitTests.csproj
COPY . .
WORKDIR /src/Demo.UnitTests
RUN apt-get update amp;amp; apt-get install -y dos2unix
RUN find . -type f -print0 | xargs -0 unix2dos
RUN dotnet test --verbosity=normal --results-directory /TestResults/
--logger "trx;LogFileName=test_results.xml" /p:CollectCoverage=true
/p:Exclude="[xunit*]*" /p:CoverletOutputFormat=opencover
/p:CoverletOutput='reports/coverage/clover.xml' Demo.UnitTests.csproj
FROM build AS publish
RUN dotnet publish Demo.API.csproj -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "Demo.API.dll"]
Здесь, в этой части :
RUN apt-get update amp;amp; apt-get install -y dos2unix
RUN find . -type f -print0 | xargs -0 unix2dos
RUN dotnet test --verbosity=normal --results-directory /TestResults/
--logger "trx;LogFileName=test_results.xml" /p:CollectCoverage=true
/p:Exclude="[xunit*]*" /p:CoverletOutputFormat=opencover
/p:CoverletOutput='reports/coverage/clover.xml' Demo.UnitTests.csproj
во второй строке я пытаюсь преобразовать все мои текстовые файлы в формат dos.
Это потому, что эти файлы имеют CarriageReturnLinFeed (/r / n) , которые преобразуются в просто перевод строки (/ n), потому что Linux использует только перевод строки (/ n). Я принудительно конвертирую их обратно, чтобы иметь CarriageReturnLinFeed (/ r / n) с помощью unix2dos.
Это очень важно, потому что некоторые модульные тесты используют CarriageReturnLinFeed (/r / n) в качестве основы тестов, и в противном случае тесты провалились бы, если бы он получал только перевод строки.
Но для того, чтобы запустить
RUN apt-get update amp;amp; apt-get install -y dos2unix
Я должен быть в контейнере Linux.
Но я хочу иметь возможность делать то же самое и в контейнере Windows.
Есть ли способ определить, запускаю ли я в данный момент dockerfile в контейнере Linux или Windows, и написать какой-либо оператор if внутри самого dockerfile и условно запускать или не запускать инструкцию apt-get ?
Комментарии:
1. Вы можете найти дополнительную информацию, связанную с созданием образов для разных ОС, используя один и тот же файл docker, здесь: 1. github.com/docker/hub-feedback/issues/1020 2. blog.docker.com/2016/09/… Спасибо
2.Вы можете сделать это, переключив запущенный docker, например, Switch, на контейнер Window или переключившись на контейнер Linus. Получите дополнительную информацию здесь callistaenterprise.se/blogg/teknik/2017/12/28 / … docs.docker.com/engine/faq Спасибо