Docker: установленный компонент родительского образа исчезает после запуска контейнера - PullRequest
0 голосов
/ 10 февраля 2020

Я хочу создать docker изображение, содержащее базовое приложение Asp. net и некоторые другие компоненты. Я решил вытащить образ debian, установить необходимые компоненты (в данном случае это система звездочек), затем зафиксировать и pu sh как мой собственный образ, назовем его A. В Asp. net Основное приложение, я использую A в качестве родительского компонента в dockefile и создаю образ, назовем его B.

Но когда я запускаю B как контейнер, я не могу найти компоненты, которые я уже установил в образе A .

Это мой dockerfile:

FROM vocaoson7/asterisk:king
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
WORKDIR /app

# copy csproj and restore as distinct layers
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore

# copy everything else and build app
COPY aspnetapp/. ./aspnetapp/
WORKDIR /app/aspnetapp
RUN dotnet publish -c Release -o out


FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS runtime
WORKDIR /app
COPY --from=build /app/aspnetapp/out ./
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

1 Ответ

1 голос
/ 10 февраля 2020

Вы пытаетесь использовать многоэтапную сборку, и способ, которым она работает, заключается в том, что ваше окончательное изображение определяется вашей последней командой FROM в вашем Dockerfile и всем, что следует за этим.

Так что для вашего случая все, что вы найдете в своем окончательном образе, это установка pnet: 3.1 (из базового образа, используемого для этапа выполнения) и папка / app, содержащая данные, сгенерированные вашим шагом сборки в каталоге out.

Ваш самый первый FROM не имеет никакого влияния на окончательное изображение.

...