2017-02-20 3 views
3

을 사용하여 첫 번째 도커 웹 프로젝트를 만들었습니다.dotnet aspnetcore docker 빌드가 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 

내 서비스가 도커 컨테이너로 성공적으로 실행되었습니다.

FROM microsoft/dotnet:latestFROM 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"] 

지금, 나는 '

다음, 나는 aspnetcore의 기본 이미지에 작동하도록 Dockerfile을 변경 시도

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 작동).

나는이 오류를 검색하려고 시도했지만 실제로 해결책을 찾지 못했습니다.

무엇이 여기에 있습니까? 나는이 여러 번의 경우와 테스트에서 145 오류를 얻고있다.

답변

4

사용중인 이미지에 SDK가 아닌 .NET Core 런타임 만 포함되어 있습니다. 다음 저장소에서 기본 이미지를보십시오 :

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


귀하의 Dockerfile가에서 다음 줄을 가지고 다음 dotnet restoredotnet build 명령은 이미지 내에서 실행되는 것을 의미

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

너는 사용하고있어. 사용중인 이미지에 SDK가 설치되어 있지 않으므로 이러한 명령을 찾지 못해보고있는 것처럼 실패합니다. 위에 링크 된 저장소의 이미지에는 SDK가 설치되어 있으므로 dotnet restoredotnet build 명령을 찾아 실행할 수 있습니다.

SDK가 설치된 기본 이미지를 사용하는 대신 개발 컴퓨터에서 빌드/게시 프로세스를 수행 한 다음 게시 된 출력을 이미지로 간단히 복사 할 수 있습니다. 이제 이미지 내에서 실행 dotnet 명령은 단순히 (사전 구축) DLL을 실행하는 하나

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

참고 : 귀하의 Dockerfile은 만의 라인을 따라 뭔가를보고해야합니다. 이것은 SDK가 아닌 런타임 만 필요합니다.

+0

답변 해 주셔서 감사합니다.하지만 알려주세요. 나는 내가 필요로하는 런타임을 포함하고있는 또 다른 도커 이미지를 기반으로 한 도커 이미지를 만들기 위해 노력하고있다. 빌드 프로세스에 SDK가 필요하다는 것을 알고 있지만 SDK가 포함 된 기본 이미지가 필요한 이유는 무엇입니까? –

+0

@AmirPopovich 답변에 대한 자세한 내용을 추가했습니다. 다른 질문이 있으면 알려주세요. – Polynomial

+0

위대한 설명 !!! 고맙습니다. 마지막 질문 : 런타임 및 SDK 만 포함하는 작은 이미지가 있습니까? 내 도커 파일에 2 개의 FROM 명령을 추가 할 수있는 방법이 있습니까? –