動かすアプリ
visual studio 操作
プロジェクト右クリして追加、Dockerサポート選べば勝手にDockerファイル作られます。
visual studioのdockerfileを右クリしてdockerfileをビルド
docker見てみる
実行ボタンをContainerにして押す。
visual studio のコンテナーログにコンテナのログが流れます。
コンテナ立ち上がった。
コンテナの中見る
32774:8080 クリックする。
手動でdockerimageを作る方法。
↑のコンテナ起動方法ではvisual studioを落としたらコンテナも落ちちゃうので、手動でイメージを作り、手動でコンテナを作ってみます。
dockerfileを右クリックで作った後、コマンドプロンプトでcdコマンドを使いslnファイルのある位置までいく。
※右クリで作ったdockerfileはslnファイルから見たファイル構成となっているので、slnの位置から実行しないと層がズレます。
次のコマンドを実行
docker build --no-cache -t kajid . -f kajiApp_blazor/Dockerfile
docker run -d -p 2000:2001 --name kajid kajid
コンテナが立ち上がった。visual studioを落としてもコンテナが落ちずにwebアプリに接続できていることを確認してください。
dockerfileちょっと説明
コメントの通りです。
dockerはdockerfile(dockerimage)とdocker run コマンドもしくはdocker-composeに依存してコンテナを立上げます。
docker run コマンドについても少し説明
docker run -d -p 2000:2001 --name kajid kajid
docker run
→ 新しいコンテナを作成して実行するコマンド。
-d
→ デタッチドモード(バックグラウンドで実行)。
-p 2000:2001
→ ホストのポート 2000 をコンテナ内のポート 2001 にマッピング。
つまり、ホスト側の localhost:2000 にアクセスすると、コンテナ内の 2001 ポートへリクエストが転送される。
--name kajid
→ 作成するコンテナに kajid という名前を付ける。
kajid
→ 使用する Docker イメージの名前。kajid というイメージが事前に存在している必要がある。
ハマりポイント①
他の端末からdockerコンテナで動かしているアプリへ接続できない。
IPアドレスで接続できない。
http://localhost:32774/ で接続できるけど、
http://100.64.16.151:32774/ で接続できない。 これで接続できないとホストマシン以外からwebアプリケーションに接続できない。
調べてみると。
ASP.NET Core では、デフォルト設定のままだと localhost 以外のホスト名でアクセスするとエラー になります。
例えば、別のPCやスマホから http://100.64.16.151:5086/ にアクセスしようとすると、
Bad Request Invalid Hostname(HTTP Error 400)
というエラーが出てしまいます。
この問題を解決するために必要なのが appsettings.json の AllowedHosts 設定 です。
【解決策】
appsettings.jsonの"AllowedHosts"を変更した。
"AllowedHosts": "localhost",
から
"AllowedHosts": "*",
に変更した。
◉リクエストの「ホスト名」を制限する設定 です。
◉これが設定されていないと、localhost 以外のリクエストを拒否 します。
appsettings.json の AllowedHosts とは?
設定値 | 説明 |
---|---|
"*" | すべてのホストを許可(どこからでもアクセス可能) |
"localhost" | ローカルPC(localhost)からのみアクセス可能 |
"100.64.16.151" | 特定のIPアドレスだけ許可 |
AllowedHosts は、リクエストの "Host" ヘッダー をチェックしてアクセスを制限する仕組み
ハマりポイント②
visual studioからビルドしたアプリは意図した通り動くけど、dockerfileからビルドしてrunしたアプリは意図した通り動かない。
↓dockerfileからビルドしてrunしたもの。
設定ページ、管理者ページは動く。
解決策
考え中・・・