Developing Discourse using a Dev Container

VS Code 以外の手順は、私が macOS で試したところ、うまく機能しませんでした。VS Code 外で Discourse Docker イメージと対話したい macOS ユーザーには、従来の boot_dev Docker スクリプトを使用することを強くお勧めします。

docker ps でコンテナ名(peaceful_lumiere のようなランダムで面白い名前)を確認しました。次に docker inspect peaceful_lumiere | jq '.[0].NetworkSettings.Networks.bridge.IPAddress' を実行すると、IP アドレスが出力されました。ブラウザで http://<ip>:4200 にアクセスしましたが、ずっと読み込み続けて止まりませんでした。

その原因は、ember-cli の開発サーバーがすべてのインターフェースでリスニングしていないためです。コンテナ内では http://127.0.0.1:4200 のみでリスニングしています。

最終的には、.devcontainer/devcontainer.jsonrunArgs セクションを追加することで動作させることができました。以下がその例です。

     8025, // mailhog
     9229  // chrome remote debug
   ],
+  "runArgs": [
+    "-p",
+    "127.0.0.1:4200:4200",
+    "-p",
+    "127.0.0.1:3000:3000",
+    "-p",
+    "127.0.0.1:9292:9292",
+    "-p",
+    "127.0.0.1:8025:8025",
+    "-p",
+    "127.0.0.1:9229:9229"
+  ],
   "remoteUser": "discourse",
   "remoteEnv": {
     "RAILS_DEVELOPMENT_HOSTS": ".app.github.dev",

…ただし、このようにすると VS Code 内では動作しなくなります(VS Code と devcontainer の両方がポート転送を試みるため)。私は別途 devcontainer-cli.json を作成し、devcontainer --override-config .devcontainer/devcontainer-cli.json を使用して動作させました。

しかし、その後に気づきました。これほど手間をかけても、既存の従来の boot_dev スクリプトを使うよりも進歩していないのです。ドキュメントに記載された手順に従う方が、CLI から devcontainer に正しい動作を強制しようとするよりも速く簡単です。

Dev Containers は主に VS Code、あるいはポート転送を自動的に管理してくれる何らかのツールでの使用を想定しています。devcontainer CLI はその機能を提供しません。したがって、VS Code を使わないのであれば、Dev Containers にこだわらない方が良いでしょう。