2016-08-19 6 views
4

asp.net 코어에서 응용 프로그램을 만들고 로컬 이미지를 생성하고 실행하는 도커 파일을 만듭니다.로컬 도커 컨테이너에서 Asp.Net 코어에 액세스 할 수 없습니다.

FROM microsoft/dotnet:latest 

COPY . /app 

WORKDIR /app 

RUN ["dotnet", "restore"] 

RUN ["dotnet", "build"] 

EXPOSE 5000/tcp 

ENTRYPOINT ["dotnet", "run", "--server.urls", "http://0.0.0.0:5000"] 

그럼,

docker build -t jedidocker/first . 

그런 다음 명령을 내 이미지를 지은 것, 나는 다음과 같은 명령

docker run -t -d -p 5000:5000 jedidocker/first 

로 컨테이너를 생성하지만 한 난을 실행할 때 내 호스트 브라우저에 URL을 입력하십시오.

http://localhost:5000/ 

나는 가지고있다 ERR_EMPTY_RESPONSE

그것은 네트워크 문제인가? 어떻게 해결할 수 있습니까?

P.S : 내 윈도우 버전은

답변

6

10.0.10586 내가 같은 문제를했고,이에 대한 해결책을 찾을 수 있습니다. 기본 수신 대기 호스트 이름을 변경해야합니다. 기본적으로 응용 프로그램은 컨테이너 외부에서 들어오는 요청을 무시하고 localhost를 수신합니다. 걸려 오는 모든 전화를 수신 할 program.cs에 코드를 변경합니다

public class Program 
{ 
    public static void Main(string[] args) 
    { 
     var host = new WebHostBuilder() 
      .UseKestrel() 
      .UseContentRoot(Directory.GetCurrentDirectory()) 
      .UseUrls("http://*:5000") 
      .UseIISIntegration() 
      .UseStartup<Startup>() 
      .Build(); 

     host.Run(); 
    } 
} 

상세 정보 :

https://medium.com/trafi-tech-beat/running-net-core-on-docker-c438889eb5a#.hwhoak2c0

당신이 포트 바인딩과 -p 플래그 컨테이너를 실행하고 있는지 확인합니다. 이 글을 쓰는 시점에서

docker run -p 5000:5000 <containerid> 

,

EXPOSE 5000:5000 

명령은 -p 명령과 같은 효과가없는 것으로 보인다. 나는 -P (대문자)를 가지고도 실제로 성공하지 못했습니다.

편집 2016년 8월 28일 :

한 가지주의해야 할. docker를 -d (분리) 모드로 작성하는 경우 dotnet run 명령이 서버를 시작하는 데 약간의 시간이 걸릴 수 있습니다. 명령 실행이 끝날 때까지 ChromeERR_EMPTY_RESPONSE을 받게됩니다. 다음과 같이

4

은 그냥 진입 점을 업데이트에는 코드 변경이 필요하지 않습니다 :

ENTRYPOINT ["dotnet", "run", "--server.urls", "http://*:5000"] 

당신이 함께 찾을 수있는 IP를 사용할 수 있도록 윈도우 서버 2016의 기본 도커 네트워크, NAT입니다 docker inspect <container name/ID>. 이것이 다른 Windows 버전의 경우에도 해당되는지 확실하지 않습니다.

+0

발린 트, 왜 이것이 작동하는지 설명해 주시겠습니까? 내 문제가 해결되었지만 그 이유를 잘 모르겠습니다. – tylerjgarland

+0

@tylerjgarland localhost (루프백)가 아닌 모든 IP 주소 (인터페이스)에서 dotnet 수신 대기하게됩니다. –

관련 문제