0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

C# blazor server .net8 アプリを Visual Studio からdockerコンテナにビルド

Last updated at Posted at 2025-02-24

動かすアプリ

visual studio 操作

プロジェクト右クリして追加、Dockerサポート選べば勝手にDockerファイル作られます。

image.png

visual studioのdockerfileを右クリしてdockerfileをビルド

image.png

docker見てみる

イメージもできてる。
image.png

実行ボタンをContainerにして押す。

visual studio のコンテナーログにコンテナのログが流れます。

image.png

コンテナ立ち上がった。

image.png

コンテナの中見る
32774:8080⁠ クリックする。

image.png

接続できた。
image.png

手動で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に依存してコンテナを立上げます。

image.png

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/ にアクセスしようとすると、

image.png

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したもの。
設定ページ、管理者ページは動く。
image.png

Home、食費、生活費は動かない。
image.png

dockerログ見てみるとエラーでてる。
image.png

解決策

考え中・・・

0
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?