質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.47%
Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Docker

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

VSCodeDevContainer

VSCode Dev Containerは、VSCodeの拡張機能の一つ。Dockerコンテナ上でVSCodeの機能が使える開発環境を構築できます。開発環境の可搬性や再現性が高く、ローカル環境への影響が低い点などが特徴です。

Q&A

0回答

86閲覧

Windows+vscode+開発コンテナーでのポート転送をランダムにしたい

guhaguha

総合スコア0

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Docker

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

VSCodeDevContainer

VSCode Dev Containerは、VSCodeの拡張機能の一つ。Dockerコンテナ上でVSCodeの機能が使える開発環境を構築できます。開発環境の可搬性や再現性が高く、ローカル環境への影響が低い点などが特徴です。

0グッド

1クリップ

投稿2024/04/24 03:45

編集2024/04/24 03:47

実現したいこと

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共に)

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問