質問するログイン新規登録
docker-compose

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

Docker

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

React.js

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

Q&A

解決済

1回答

773閲覧

ホストマシンのVSCodeに node_modulesが表示されない

inoda

総合スコア11

docker-compose

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

Docker

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

React.js

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

0グッド

0クリップ

投稿2024/05/22 09:28

0

0

dockerでReactのコンテナを立てています。
ビルドツールはViteで、npmを使っています。末尾に、バージョン等を記載しています。

質問したいこと

コンテナの node_modules ディレクトリは中身が見えるのに、ホストマシンのVSCode上では node_modules が空になっているのを、見えるようにしたいです。

コンテナから実行されているので、アプリケーション自体は動きますが、ホストマシンのVSCode上では node_modulesが空なので、コードの静的解析ツールから無限に怒られてしまいます。

以下にソースコードを示します。

ソースコード

Dockerfile

1FROM node:20.13.1 2 3WORKDIR /front 4 5COPY package.json package-lock.json /front 6 7RUN npm install 8 9COPY . /front 10EXPOSE 3000 11 12CMD ["npm", "run", "dev", "--", "--host"] 13

compose.yaml

1(中略) 2 front: 3 container_name: front 4 build: 5 context: ./frontend 6 dockerfile: Dockerfile.dev 7 volumes: 8 - ./frontend:/front 9 - node_modules_volumes:/front/node_modules 10 command: bash -c "npm install && npm run dev -- --host" 11 ports: 12 - "${FRONT_PORT}:5173" 13# トップレベルのvolumes 14volumes: 15 mysql_db: 16 node_modules_volumes:

試したこと

① Dockerfile から npm install せずに、compose.yamlの commandエントリから実行する
こちらの記事 を参考にしました。

② compose の、トップレベルのvolumes に設定を追加する
こちらの記事  を参考にして、試してもみました。
内容としては、以下のような変更です。

compose.yaml

1 node_modules: 2 driver: local 3 driver_opts: 4 type: none 5 device: ${PWD}/node_modules 6 o: bind

いずれも表示されませんでした。
ちゃんとコードの意味理解してから書け、というのは自分でも責めたいところですが、なぜこうなっているのか、分からない所が分かっていない状態でパンクしてしまっています。
Dockerの公式ドキュメントにも当たってみましたが、なかなかクリーンヒットする部分が見つけられませんでした。

どなたか、お力添えを頂ければ幸いです。

バージョン

nodenpmvite
20.13.110.5.25.2.0

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

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

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

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

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

guest

回答1

0

ベストアンサー

volumesの下記の行で別途マウントされているのが原因です。

- node_modules_volumes:/front/node_modules

該当行を削除するか、VSCodeならdevcontainer環境を整えても良いかなと思います。devcontainerはコンテナ内で開発を行うので、ホスト上にはdocker以外不要となります。

投稿2024/05/22 10:30

Eggpan

総合スコア3303

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

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

inoda

2024/05/24 01:15

回答してくださってありがとうございます。 少しこちらの事情に応じた対応が必要でしたが、ご指摘いただいた部分を変更して、無事ホストマシンに反映されました。ありがとうございました。 質問前の時点で、ご指摘いただいた部分をコメントアウトして docker compose down, buildしなおして、docker compose up しても、変化がありませんでしたが、もしかしたらと思って、 一度 image と volume を削除してから、volumesの行を削除して起動した所、無事にホストマシンにもコンテナと同じ内容が表示されました。 これはつまり、ボリュームマウントをやめて、node_modulesも含めてアプリケーションディレクトリをそのままコンテナにバインドマウントするようにしたため、他のアプリケーションコードと同じようにホストマシンにそのまま表示されるようになったのだと理解しています。volumeに関してはブラックボックスにしてしまっている部分が多くて、浅い質問になってしまって申し訳ありません。 devcontainer環境ですか、確かにホストマシンとの兼ね合いをあまり考えなくて良くなるし、毎回 docker compose exec front npm install ... のようにしなくても良くなるなら楽ですね(エイリアスは設定していますが)。教えてくださってありがとうございます。検討してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.29%

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

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

質問する

関連した質問