Developing Discourse using a Dev Container

Esas instrucciones que no son para VS Code no me funcionaron hace un momento en macOS. Recomiendo que los usuarios de macOS que deseen interactuar con la imagen Docker de Discourse fuera de VS Code utilicen el script Docker heredado boot_dev en su lugar.

Con docker ps encontré el nombre de mi contenedor (un nombre aleatorio y gracioso, como peaceful_lumiere). Ejecuté docker inspect peaceful_lumiere | jq '.[0].NetworkSettings.Networks.bridge.IPAddress' y me devolvió una dirección IP. Fui a http://<ip>:4200 en mi navegador y simplemente se quedó girando para siempre.

Creo que eso se debe a que el servidor de desarrollo de ember-cli no está escuchando en todas las interfaces; solo está escuchando en http://127.0.0.1:4200 dentro del contenedor.

Finalmente logré que funcionara agregando una sección runArgs a .devcontainer/devcontainer.json, así:

     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",

… pero si haces eso, no funcionará en VS Code (porque tanto VS Code como el devcontainer intentarán reenviar puertos). Creé un archivo devcontainer-cli.json separado y usé devcontainer --override-config .devcontainer/devcontainer-cli.json, y eso funcionó.

Pero luego me di cuenta: he pasado por todos estos obstáculos, pero no estoy mejor que usando el script heredado existente boot_dev. Seguir esos pasos documentados es más rápido y fácil que intentar obligar a devcontainer a hacer lo correcto desde la CLI.

Los Dev Containers están diseñados principalmente para usarse en VS Code, o en algo que gestione automáticamente el reenvío de puertos por ti; la CLI de devcontainer no hace eso. Así que, si no quieres VS Code, quizás sea mejor no molestarse con los Dev Containers.