【備忘】docker-composeにてPJルートをworkspace指定したい
![](https://images.microcms-assets.io/assets/16526c12b52b4a198b9cd25f4e1f803e/d37dca87928e4fef8228b847ed8a16f1/%E3%82%BF%E3%82%B3%E3%82%AF%E3%83%A9%E3%82%B2.jpg)
Introduction
久しぶりにdocker-composeを用いてWebシステムの開発環境を構築しようとして盛大に詰まりました。やりたいこととしては、
- Web/API開発用のコンテナ(for Express.js)
- Web Frontend開発用のコンテナ(for Nuxt.js)
- DBサーバ用のコンテナ(for PostgreSQL)
の3つのコンテナを立てて、VSCodeからPJルートをマウントして開発したい。
<やりたいこと>
- PJルート ← ここをVSCodenのworkspaceとしてマウント
- webserver
- app
- 開発資源
- Dockerfile
- front
- app
- 開発資源
- Dockerfile
- postgresql
- psdata
- データベースファイル
- Dockerfile
- docker-compose.yaml
<やりたくないこと、何もしないとこうなっちゃった>
- PJルート
- webserver
- app ← ここがVSCodenのworkspaceとしてマウント
- 開発資源
- Dockerfile
- front
- app
- 開発資源
- Dockerfile
- postgresql
- psdata
- データベースファイル
- Dockerfile
- docker-compose.yaml
上記構成ででコンテナを3つたてるところまでは完了。
次にVSCodeでPJルートを開き、コンテナを起動します。このときPJルートをworkspaceとしてマウントしたいと思っています。理由としては
- この構成自体をGitの管理対象にしたい、故にPJルート上でGitの初期設定をしたい
- VSCodeからGit操作できるようにするにはGitのルート=PJルートをworkspaceにする必要がある
- コンテナ横断でPJ全体のフォルダ・ファイルを俯瞰ししたいから
そのため、いつもPJルートをworkspaceとしてVSCodeで開くようにしていますが、今回それが素直にいきませんでした。VSCodeでPJルートからコンテナ起動しようとするとworkspaceを指定するようメッセージが表示されました。その際に指定できるフォルダはコンテナ配下のみ。具体的にはWeb/API開発用のコンテナの配下のapp等しか選ぶことができず、その上位階層が見えない。コンテナを動かして、コンテナ上のフォルダをworkspaceとしてマウントするのでコンテナの外が見えないのはよく考えれば当たり前といえばあたり前なのですが…、以前はそれができた。でも今はそれができない?長い悩みの旅の始まりでした、2,3時間くらい溶かしたかな。
![](https://images.microcms-assets.io/assets/16526c12b52b4a198b9cd25f4e1f803e/94cba46245a347069a2714ae92e0848d/20240505_docker-compose-1.jpg)
![](https://images.microcms-assets.io/assets/16526c12b52b4a198b9cd25f4e1f803e/97eb2d842b60489c89b4ef63ba5b455a/20240505_docker-compose-2.jpg)
解決策
docker-compose.yaml上に下記1文を追記してコンテナをリビルドすることで解決しました。
![](https://images.microcms-assets.io/assets/16526c12b52b4a198b9cd25f4e1f803e/022656fb56674c59bef8b5d3857fd093/20240505_docker-compose-3.jpg)
具体的には、Web/API開発用のコンテナ(webserver)のマウント設定として、ホスト側のPJルート(.)とコンテナ側のworkspaceフォルダを紐づけるというもの。これによってコンテナからworkspaceフォルダを参照するとホスト側のPJルートが参照できるというもの。気づいてみれば至極簡単なことでした。とはいえ次回、絶対に忘れる自信があるので、ここに備忘録として残しておきます。
![](https://images.microcms-assets.io/assets/16526c12b52b4a198b9cd25f4e1f803e/0fb72731fc27416095547372242ad2b9/20240505_docker-compose-4.jpg)
解決したのはよいのですが、これまで(現に今 私のPC上で動いているほかのコンテナ)はこんなことしなくても上手く動いていたのは何故だろう?不思議でならないのですが。。。
おまけ
docker-composeということで、クジラやタコをアイキャッチにしようと思ったものの、良いものが見当たらず…、なので最近 新江ノ島水族館で撮影したタコクラゲを添えてみました。
追記
この事象ですが、どうもコマンドラインからdocker-composeのビルドをせず、直接VSCodeから起動時にビルドすると発生しないケースがあることがスクリーンショット撮りながら再現してみてわかりました。エラー画面を期待する操作をしたのにエラーにならなかった…。
つまり直接VSCodeから起動時にビルドしてしまえば、docker-compose.yamalに1文追加もいらないのかもしれない。まあ書いておいて悪さはしないし、書いてあったほうが辻褄があっていて気持ち良いのでそのままにしておきますが。シンプルに相性問題を食らっただけなのかもしれませんね、とほほ。