🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

1回答

7531閲覧

【React+docker-compose】localhost:3000 へアクセスができない

skytomo

総合スコア35

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2021/02/14 01:02

編集2021/02/14 01:21

前提・実現したいこと

ブラウザで localhost:3000 に接続するとサイトが表示されるようにしたいです。

発生している問題・エラーメッセージ

docker-composeでReactを使ったサイトを作ろうとしているところです。

docker-compose upをしたところ、以下のように正しくコンパイルしたように見えます。

sh

1$ docker-compose up 2Starting ringoyaki-web ... done 3Attaching to ringoyaki-web 4ringoyaki-web | 5ringoyaki-web | > ringoyaki@0.1.0 start /usr/src/app 6ringoyaki-web | > webpack serve 7ringoyaki-web | 8ringoyaki-web | ℹ 「wds」: Project is running at http://localhost:3000/ 9ringoyaki-web | ℹ 「wds」: webpack output is served from / 10ringoyaki-web | ℹ 「wds」: Content not from webpack is served from /usr/src/app 11ringoyaki-web | ℹ 「wdm」: asset bundle.js 1.39 MiB [emitted] (name: main) 12ringoyaki-web | asset index.html 178 bytes [emitted] 13ringoyaki-web | runtime modules 24.9 KiB 10 modules 14ringoyaki-web | modules by path ./node_modules/ 1.29 MiB 15ringoyaki-web | modules by path ./node_modules/webpack-dev-server/client/ 20.9 KiB 10 modules 16ringoyaki-web | modules by path ./node_modules/webpack/hot/ 4.46 KiB 5 modules 17ringoyaki-web | modules by path ./node_modules/html-entities/lib/*.js 61 KiB 5 modules 18ringoyaki-web | modules by path ./node_modules/scheduler/ 31.8 KiB 4 modules 19ringoyaki-web | modules by path ./node_modules/url/ 37.4 KiB 3 modules 20ringoyaki-web | modules by path ./node_modules/querystring/*.js 4.51 KiB 3 modules 21ringoyaki-web | modules by path ./node_modules/react/ 70.6 KiB 2 modules 22ringoyaki-web | modules by path ./node_modules/react-dom/ 875 KiB 2 modules 23ringoyaki-web | modules by path ./node_modules/strip-ansi/ 296 bytes 2 modules 24ringoyaki-web | modules by path ./src/ 856 bytes 25ringoyaki-web | ./src/index.tsx 486 bytes [built] [code generated] 26ringoyaki-web | ./src/components/App.tsx 370 bytes [built] [code generated] 27ringoyaki-web | webpack 5.21.2 compiled successfully in 3263 ms 28ringoyaki-web | ℹ 「wdm」: Compiled successfully.

しかし実際にブラウザで localhost:3000 に接続しようとすると、
ERR_EMPTY_RESPONSEとなってしまいます。

該当のソースコード

以下にDockerfileを示します。

Dockerfile

1FROM node:14.15.5-slim 2WORKDIR /usr/src/app 3 4COPY package*.json ./ 5RUN npm install 6COPY . .

以下にdocker-compose.ymlを示します。

yml

1version: "3" 2services: 3 web: 4 container_name: ringoyaki-web 5 build: . 6 volumes: 7 - ./:/usr/src/app 8 - /usr/src/app/node_modules 9 command: sh -c "npm run start" 10 ports: 11 - "3000:3000"

その他のソースコードは
https://github.com/skytomo221/ringoyaki
に公開しています。

試したこと

Firefox以外でEdgeやGoogle Chromeでもアクセスを行いましたが、
同じく接続できませんでした。

ローカルでnpm installしてnpm run startをして
ブラウザでlocalhost:3000にアクセスした場合は正しくサイトに接続できました。

docker-compose psで確認してもちゃんとPortsはつながっているようです。

sh

1$ docker-compose ps 2 Name Command State Ports 3------------------------------------------------------------------------------- 4ringoyaki-web docker-entrypoint.sh sh -c ... Up 0.0.0.0:3000->3000/tcp

WSL のバージョンも2であることを確認しました。

sh

1$ wsl --list --verbose 2 NAME STATE VERSION 3* Ubuntu Stopped 1 4 docker-desktop Running 2 5 docker-desktop-data Running 2

セキュリティソフトはWindows Defenderのみです。

Microsoft Defender ファイアウォールをすべて無効にして、
試してみましたがうまくいきませんでした。

補足情報(FW/ツールのバージョンなど)

DockerはDocker Desktopでインストールしました。

  • OS: Windows 10 Home
  • OSビルド: 19042.804
  • docker: Docker version 20.10.2, build 2291f61
  • docker-compose: docker-compose version 1.27.4, build 40524192
  • ブラウザ: Firefox Browser 85.0.2 (64 ビット)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

こんにちは。
念のため、portsの指定をstringで明示してはいかがでしょうか。
また、FWなどでもブロックされないかもご注意下さい。

yaml

1 ports: 2 - "3000:3000"

Ref. https://docs.docker.com/compose/compose-file/compose-file-v3/#ports

追記:

Dockerfile側にも、EXPOSE 3000 があってもいいかなと思います。(単体でdocker runの場合も鑑み)
また、npm run start => webpack serve に該当しますが、docker-composeでコンテナとWindows側のポートをフォワードしているので、webpack serve --host 0.0.0.0 にすると如何でしょう。

(※開発環境ということで --host 0.0.0.0 をひとまず指定)

投稿2021/02/14 01:11

編集2021/02/14 02:48
suama

総合スコア1997

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

skytomo

2021/02/14 01:20

回答ありがとうございます。 文字列に変えて、 Microsoft Defender ファイアウォールをすべて無効にして、 試してみましたがうまくいきませんでした。 質問の記事の編集させていただきます。
suama

2021/02/14 02:50 編集

ありがとうございます! package,jsonのところで "webpack serve” しているので、こちらを "webpack serve --host 0.0.0.0” としてみていかがでしょう? ホスト側(Windows) から見て、ポート的にはlocalhostにマップされますが、コンテナ内で起動しているnode.jsのアプリケーション的には、コンテナ内がlocalhostに当たるので、Windowsからプロキシされて届くリクエストは、外部からIP指定でアクセスされるため。
skytomo

2021/02/14 02:55

--host 0.0.0.0 を追加したところ、アクセスできるようになりました! docker runは今は使いませんが、今後のことも考えて、 EXPOSE 3000 も追加しておきます。ありがとうございます。
suama

2021/02/14 03:02

よかったです! その上で、ファイアウォールや「これはなくても大丈夫かな?」といった設定を外してみていってくださいね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問