2016-08-19 8 views
4

私はasp.netコアでアプリケーションを作成し、ローカルイメージを生成して実行するためのドッカーファイルを作成しました。ローカルDockerコンテナの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:私のWindowsのバージョンは、私は同じ問題を持っていたし、これに対する解決策を見つけた10.0.10586

答えて

6

です。デフォルトのリスニングホスト名を変更する必要があります。デフォルトでは、アプリケーションはローカルホストをリッスンし、コンテナの外部からの着信要求は無視します。

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(); 
    } 
} 

詳細情報:あなたのコードは、すべての着信コールをリッスンするようにprogram.csの変化

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(大文字)のどちらでも本当にうまくいっていません。

編集8/28/2016:

注意すべき点は1つです。 dockerを-d(detached)モードで作成している場合は、dotnet runコマンドでサーバーを起動するのに少し時間がかかることがあります。コマンドの実行が完了するまで(そしてその前に他のコマンドが実行されるまで)、ChromeにはERR_EMPTY_RESPONSEが表示されます。

4

次のようにちょうどあなたのエントリポイントを更新し、何のコード変更が必要とされない:

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

は、Windows Server 2016上のデフォルトドッカーネットワークがNATであるので、あなたは、あなたと見つけることができたIPを使用する場合がありますdocker inspect <container name/ID>。これが他のWindowsバージョンでも当てはまるかどうかは不明です。

+0

バランント、なぜこれが機能するのか説明できますか?私の問題は解決しましたが、理由を理解できていません。 – tylerjgarland

+0

@tylerjgarlandこれは、localhost(ループバック)だけでなく、すべてのIPアドレス(インターフェイス)でdotnetを受信させます。 –

関連する問題