2015-11-28 13 views
6

私は以下のガイドに従っています:Running ASP.NET 5 applications in Linux Containers with Dockerこれは私のWindows PCまたはLinuxサーバーで動作するようにはできません。私dockerfileは、次のようになります。ドッキングステーションからasp.net 5を実行できません

FROM microsoft/aspnet 

COPY . /app 
WORKDIR /app 
RUN ["dnu", "restore"] 

EXPOSE 5000/tcp 
ENTRYPOINT ["dnx", "-p", "project.json", "web"] 

私はその後docker build -t myapp .を実行し、その後docker run -d -p 80:5000 myappそれが実行されていると言うが、私は、ブラウザでWebサイトを開くことができません。私はWindows上であなたが192.168.99.100となったdocker-machine ip defaultを使用して実際の仮想マシンが実行されているIPアドレスを見つけるはずですが、私がhttp://192.168.99.100に移動したときに、一般的な「このWebページは利用できません」というエラーメッセージが表示されます。私はまたdocker run -it -p 80:5000 myapp,docker run -p 80:5000 myappのようなこのドッカーの実行コマンドのさまざまなバリエーションを試してみました。また、docker run -d -p 5000:5000 myappなどの異なるポートを試しましたが、何も動作していないようです。

私はWindowsマシンとLinuxサーバーの両方でこれを試しましたが、どちらも動作しません。

ドッカーなしでdnx webを実行でき、すべて正常に動作します。

+0

バーチャルボックスなどを使用していますか?それとも、適切なサーバーのインストールですか? – RubbleFord

答えて

3

あなたのアプリケーション環境をより完全に理解するには、project.jsonファイルと作業しているASP.netのベータ版を投稿してください。

今のところ、ENTRYPOINT命令から "project.json"と "-p"引数を取り出し、EXPOSEコマンドからtcpを削除し、最後に "--server.urls

FROM microsoft/aspnet 

COPY . /project   
WORKDIR /project  
RUN ["dnu", "restore"] 

EXPOSE 5000 

ENTRYPOINT ["dnx", "web", "--server.urls"] 

を別の方法としては、ENTRYPOINT命令で、完全にコマンドを公開し、ドッキングウィンドウポート、5000を公開落とし試すことができ、次のように「ENTRYPOINT命令で引数が、それは0.0.0.0ではなく、デフォルトはlocalhostで使用するように

FROM microsoft/aspnet 

COPY . /project   
WORKDIR /project  
RUN ["dnu", "restore"] 

ENTRYPOINT ["dnx", "web", "--server.urls", "http://0.0.0.0:500"] 

あなたは、あなたのコンテナを作成し、以下のようなものを使用して、それを実行しますどちらの方法:

$ docker run -it -p 80:5000 myapp 
+0

興味深いことに、私はasp.netのサンプルプロジェクトを使用しており、ドッカーのページから直接リンクされたガイドを使用していますが、まだ動作しません。なぜこれが動作するのか、なぜ彼らが提供するものが動作しないのかについての説明を追加できますか? – socketman

+0

@socketmanリンク先は1月からのもので、beta2のようです。 6つ以上のベータ版がリリースされており、今月は最終的にrc1になりました。ロットが変更されました:) –

6

ここに私の答えを見てみましょう:基本的にASP.NET 5.0 beta 8 in Docker doesn't start

を、ドッカーが0.0.0.0であなたのコンテナに要求を転送していますKestrelはデフォルトでlocalhostだけをリッスンしています。

はい、リクエストはあなたのドッカーコンテナに渡されていますが、Kestrelウェブサーバーで受け入れられていません。他の人が投稿しているように、そのような理由から、あなたがserver.urlsプロパティをオーバーライドする必要があります。

ENTRYPOINT ["dnx", "web", "--server.urls", "http://0.0.0.0:5000"] 

をあなたはその後、表示されるはずです。

​​

あなたのコンテナを実行しているとき。速いdocker psコマンドを実行して、0.0.0.0が実際にDockerが要求を転送しているネットワークインターフェイスであることを確認することもできます。

私はASPの入手方法についても少し書いています。DockerをWindows上で実行しているNET 5 - これはDockerがコンテナにリクエストを転送する必要があるだけでなく、Docker仮想マシンboot2docker(通常VirtualBoxでdefaultと呼ばれます)にリクエストを渡す必要があるため、 Dockerがそれらを私たちのコンテナに渡す前に。

ポストはここにある:あなたが作業を見つけることができますhttp://dotnetliberty.com/index.php/2015/10/25/asp-net-5-running-in-docker-on-windows/

1

、ここドッカーとASP.NETコアRC1のためのステップバイステップのチュートリアル: https://www.sesispla.net/blog/language/en/2015/12/recipe-asp-net-5-net-core-to-the-docker-container/

おそらくあなたが不足しているトリッキーな部分がにありますprojects.jsonコマンドを次のように変更してください。

"commands": { 
    "web": "Microsoft.AspNet.Server.Kestrel --server.urls http://0.0.0.0:5000" 
    }, 

デフォルトでは、kestrelはローカルホスト接続のみを受け入れます...この変更により、どのソースからでも接続できます。

2

RC2でこの問題が発生した場合は、コマンドは存在しなくなります。 .UseUrls( "http://0.0.0.0:5000")を連鎖してProgram.csを更新する必要があります。 5000からあなたの希望のポートが何であっても変更することができます。

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

     host.Run(); 
    } 
} 
関連する問題