2017-02-20 25 views
3

Я использовал this tutorial, чтобы создать свой первый проект webapi для докеров.dotnet aspnetcore docker build не работает с кодом ошибки 145

Я использую окна 7 (панель инструментов докеров).

Это то, что я побежал:

dotnet new webapi 

Это Dockerfile:

FROM microsoft/dotnet:latest 
COPY . /app 
WORKDIR /app 

RUN ["dotnet", "restore"] 
RUN ["dotnet", "build"] 

EXPOSE 5000/tcp 
ENV ASPNETCORE_URLS http://*:5000 

ENTRYPOINT ["dotnet", "run"] 

Это, как я создал образ:

docker build -t mydemos:aspnetcorehelloworld . 

И это, как я Создан и запущен контейнер:

docker run -d -p 8080:5000 -t mydemos:aspnetcorehelloworld 

Мое обслуживание прошло успешно в качестве контейнера-докера.

Затем я попытался изменить Dockerfile работать на aspnetcore базового изображения:

FROM microsoft/dotnet:latest было изменено на FROM microsoft/aspnetcore:1.0.1

Новый Dockerfile выглядит как:

FROM microsoft/aspnetcore:1.0.1 
COPY . /app 
WORKDIR /app 

RUN ["dotnet", "restore"] 
RUN ["dotnet", "build"] 

EXPOSE 5000/tcp 
ENV ASPNETCORE_URLS http://*:5000 

ENTRYPOINT ["dotnet", "run"] 

Теперь я ve попытался построить новое изображение, используя

docker build -t mydemos:aspnetcorehelloworld1 . 

И я получаю сообщение об ошибке.
Это журнал сборки:

Sending build context to Docker daemon 636.9 kB 
Step 1/8 : FROM microsoft/aspnetcore:1.0.1 
---> 2c7bbc508bb2 
Step 2/8 : COPY . /app 
---> Using cache 
---> 1d5b9bd908b3 
Step 3/8 : WORKDIR /app 
---> Using cache 
---> c1d5d091d111 
Step 4/8 : RUN dotnet restore 
---> Running in 8399e21caeb2 
Did you mean to run dotnet SDK commands? Please install dotnet SDK from: 
    http://go.microsoft.com/fwlink/?LinkID=798306&clcid=0x409 
The command 'dotnet restore' returned a non-zero code: 145 

Я пошел в URL, переустановил вещи, и я все еще получаю ошибку.
Я попытался использовать команды dotnet cli в том же сеансе командной строки и мне удалось (dotnet restore works).

Я попытался найти эту ошибку, но не смог найти решение.

Что мне здесь не хватает? Я получаю эту ошибку 145 во многих случаях и тестах.

ответ

4

Изображение, которое вы используете, содержит только среду выполнения .NET Core, а не SDK. Попробуйте базовое изображение из следующего хранилища:

https://hub.docker.com/r/microsoft/aspnetcore-build/


Ваш Dockerfile имеет следующие строки в нем:

RUN ["dotnet", "restore"] 
RUN ["dotnet", "build"] 

Это означает, что команды dotnet restore и dotnet build работают в пределах изображения вы используете. Поскольку изображение, которое вы используете, не имеет установленного SDK, эти команды не могут быть найдены и сбой, как вы видите. Изображения в репозитории, с которым я связан выше, имеют SDK, установленный внутри них, и поэтому команды и dotnet build могут быть найдены и выполнены.

Альтернативой использованию базового изображения с установленным SDK должно быть выполнение процесса сборки/публикации на вашей машине разработки, а затем просто копирование опубликованного вывода в изображение. Ваш Dockerfile только тогда нужно будет искать что-то вдоль линий:

FROM microsoft/aspnetcore:1.0.1 
WORKDIR /app 
COPY ./app . 
ENTRYPOINT ["dotnet", "TheNameOfYourProject.dll"] 

Обратите внимание, что теперь dotnet команды запускаются в пределах изображения является просто один, который работает ваш (предварительно сложенный) DLL. Для этого требуется только время выполнения, а не SDK.

+0

Спасибо за ответ, но позвольте мне кое-что понять. Я пытаюсь создать изображение докера, основанное на другом изображении докеров, которое содержит требуемое время выполнения. Я понимаю, что процесс сборки требует SDK, но зачем мне базовое изображение, содержащее SDK? –

+0

@AmirPopovich Я добавил еще несколько подробностей в ответ, дайте мне знать, если у вас есть другие вопросы. – Polynomial

+0

Отличное объяснение !!! Большое спасибо. Последние вопросы: есть ли меньшее изображение, содержащее только время выполнения и SDK? Есть ли способ добавить 2 команды FROM в файл докеры? –

Смежные вопросы