Developing Discourse using a Dev Container

Ces instructions non spécifiques à VS Code ne m’ont pas fonctionné tout à l’heure sous macOS. Je recommande aux utilisateurs de macOS souhaitant interagir avec l’image Docker de Discourse en dehors de VS Code d’utiliser à la place le script Docker legacy boot_dev.

Avec docker ps, j’ai trouvé le nom de mon conteneur (un nom aléatoire et bizarre, comme peaceful_lumiere). J’ai exécuté docker inspect peaceful_lumiere | jq '.[0].NetworkSettings.Networks.bridge.IPAddress' et cela a affiché une adresse IP. J’ai ensuite accédé à http://<ip>:4200 dans mon navigateur, mais la page est restée indéfiniment en train de tourner.

Je pense que c’est parce que le serveur de développement ember-cli n’écoute pas sur toutes les interfaces ; il n’écoute que sur http://127.0.0.1:4200 à l’intérieur du conteneur.

J’ai finalement réussi à faire fonctionner en ajoutant une section runArgs dans .devcontainer/devcontainer.json, comme ceci.

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

… mais si vous faites cela, cela ne fonctionnera pas dans VS Code (car VS Code et le devcontainer tenteront tous deux de transférer les ports). J’ai créé un fichier devcontainer-cli.json séparé et utilisé devcontainer --override-config .devcontainer/devcontainer-cli.json, ce qui a fonctionné.

Mais il m’est alors venu à l’esprit : j’ai accompli toutes ces étapes compliquées, mais je ne suis pas mieux loti que si j’avais utilisé le script legacy boot_dev existant. Suivre les étapes documentées est plus rapide et plus simple que d’essayer de forcer devcontainer à faire ce qu’il faut depuis la ligne de commande.

Les Dev Containers sont principalement conçus pour être utilisés dans VS Code, ou dans quelque chose qui gérera automatiquement le transfert de ports pour vous ; l’interface en ligne de commande devcontainer ne le fait pas. Donc, si vous ne voulez pas utiliser VS Code, peut-être vaut-il mieux ne pas s’embêter avec les Dev Containers.