実現したいこと
Windows11上のvscodeで開発コンテナを用いる際、ポート転送をランダムポートに設定したい。
前提
なにがしたいのか
環境を問わず、開発コンテナー内のポートに対してホスト側でランダムポートに割り当てたい。devcontainer.json
の記述に対する追加内容をご存じでしたら教えていただきたいです。
状況説明
PHPの簡易Webサーバー機能を使ってコンテナ上の80/tcpでWebサーバーが起動しています。
これを検出してホスト側で使えるようにしています。devcontainer.jsonにて以下の記述でポートフォワードを指定しています。
"forwardPorts": [ 80 ],
この設定に対して、macOSで開発コンテナー起動すると、ホスト側はランダムポートでマップする(80/tcp -> 54321/tcp)のですが、
Windows環境(+DockerDesktop+WSL2)で開発コンテナーを起動したときは、素直にマップしてしまいます(80->80)。
このため、ホスト側で80/tcpが使われていなければ問題無いのですが、ホスト側80/tcpが使われていても80/tcpにマップするために正常にコンテナ内のページが表示できないという状況になってしまっております。
検証として、Windowsホスト側で
PS> docker run -p 80:80 --name nginx -d nginx
して先に80/tcpを使うようにしても、開発コンテナ内で80->80のマップをしていてnginx側の初期ページが見える状況です。
該当のソースコード
json
1{ 2 "name": "PHP環境", 3 "dockerComposeFile": [ 4 "../compose.yml", 5 "docker-compose.yml" 6 ], 7 "service": "web", 8 "workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}", 9 10 "forwardPorts": [ 11 80 12 ], 13 "remoteUser": "vscode", 14 "customizations": { 15 "vscode": { 16 "extensions": [ 17 "DEVSENSE.phptools-vscode", 18 "MS-CEINTL.vscode-language-pack-ja", 19 "mhutchie.git-graph", 20 "saikou9901.evilinspector", 21 "oderwat.indent-rainbow", 22 "mechatroner.rainbow-csv", 23 "xdebug.php-debug" 24 25 ], 26 "settings": { 27 "files.exclude": { 28 "**/.git": true, 29 "**/.svn": true, 30 "**/.hg": true, 31 "**/CVS": true, 32 "**/.DS_Store": true, 33 "**/Thumbs.db": true, 34 "**/tests": true, 35 "**/.github": true, 36 "**/Pipfile*": true, 37 "**/Makefile*": true, 38 "**/.devcontainer": true, 39 "**/compose*.yml": true 40 } 41 } 42 } 43 } 44} 45
補足情報(FW/ツールのバージョンなど)
- WIndows11(23H2)
- macOS 14.4.1
- vscode 1.88.1(win/mac共に)
- Docker Desktop 4.29.0(win/mac共に)
あなたの回答
tips
プレビュー