web-dev-qa-db-ja.com

localhostがDocker Windows 10で機能しない

VS2017 Dockerサポートを使用しています。 VSはDockerFileを作成し、私がdocker-composeファイルを作成すると、コンテナーが作成され、172.x.x.x IPアドレスでアプリが実行されます。しかし、私は自分のアプリケーションをlocalhostで実行したいと思っています。

私は多くのことをしましたが、何もうまくいきませんでした。最初に docker docs および building Microsoft sample app に従いました。 2番目のリンクは完全に機能していますが、最初のリンクのアプローチを試行すると、HTTPエラー404が発生します。

どんな助けでもありがたいです。

5
Usama Saleem

機能していないと指摘したDocker Docsに投稿された例にアクセスするには、以下の手順に従います。

1-実行中のすべてのDockerコンテナーを一覧表示します

docker ps -a

このコマンドを実行すると、現在実行中のすべてのDockerコンテナーを表示できるはずです。Dockerのドキュメントの例に正しく従えば、webserverという名前のコンテナーがリストに表示されます。

2-webserverコンテナーが実行されているIPアドレスを取得します。これを行うには、次のコマンドを実行します。

 docker inspect -f "{{ .NetworkSettings.Networks.nat.IPAddress }}" webserver

webserverコンテナーが実行しているIPアドレスを取得する必要があります。質問に添付したMicrosoftサンプルアプリのビルド例でも使用できるため、このステップに精通していることを願っています。

上記のコマンドを実行すると、取得したIPアドレスにアクセスすると、目的の出力が表示されます。

最初の質問(Windowsのdockerでlocalhostを使用してdockerコンテナーにアクセスする)に答えると、Windowsホストでは、デフォルトのNATネットワークスタックの制限により、localhostを使用してコンテナーにアクセスできません。詳細この問題の説明は、この link にアクセスして取得できます。Dockerのドキュメントはまだ更新されていないようですが、この問題のみです。 Windowsホストに存在します。

これについても報告されている問題があります-これを参照するには、これをフォローしてくださいlink

これがお役に立てば幸いです。

[〜#〜]編集[〜#〜]

この問題の解決策は、将来のWindowsリリースで提供される予定です。しかし、そのリリースでは、この制限がWindowsホストで利用できます。このリンクをたどってください-> https://github.com/MicrosoftDocs/Virtualization-Documentation/issues/181

2

ほとんどの場合、別のアプリケーションがすでにポート80で実行されています。Webサイトを別のポートに転送する必要があります。例:

docker run -d -p 5000:80 --name myapp myasp

また、ブラウザでhttp://localhost:5000をポイントします。

コンテナーを起動するときに、-pオプションを使用して、ホストのポートとして公開される内部ポートを指定します。 -p 80:80は、Webサイトで使用されるinnerポート80をホストのポート80に公開します。

Dockerはanotherアプリケーションがすでにポート80でリッスンしている場合、IIS、別のWebアプリケーション、またはデフォルトで80で実行されるWebインターフェースを備えた任意のtoolである場合でも問題を報告しません。

解決策は次のとおりです。

  1. ポート80で他に何も実行されていないことを確認します。
  2. 別のポートに転送します。

別のポートに転送する方がはるかに簡単です。

canに確実にポートに接続するには、次のようにtelnetコマンドを使用します。

telnet localhost 5000

すぐに空白のウィンドウが表示される場合は、サーバーがこのポートで稼働中であることを意味します。メッセージが表示され、しばらくしてタイムアウトになる場合は、誰も実行していないことを意味します。この両方を使用して、空きポートをチェックしますandコンテナーWebアプリに接続できることを確認します。

[〜#〜] ps [〜#〜]テスト用にSQL Serverコンテナをセットアップしようとしていたので、1週間前にこの問題に遭遇しました。私は1つのデフォルトと2つの名前付きインスタンスをすでに実行しており、dockerはコンテナーを作成しようとしたときにまったく問題がありませんでした。何が悪いのかを理解するのにしばらくかかりました。

2