Developing Discourse using a Dev Container

Эти инструкции, не связанные с VS Code, не сработали для меня только что на macOS. Я рекомендую пользователям macOS, которые хотят взаимодействовать с образом Docker Discourse вне VS Code, использовать устаревший скрипт Docker boot_dev.

С помощью команды 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 внутри контейнера.

В конце концов я заставил это работать, добавив секцию runArgs в файл .devcontainer/devcontainer.json, вот так:

     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. Следование этим документированным шагам быстрее и проще, чем попытки заставить devcontainer делать нужное действие из CLI.

Dev Containers предназначены в первую очередь для использования в VS Code или в чём-то ещё, что автоматически управляет перенаправлением портов; CLI devcontainer этого не делает. Поэтому, если вы не хотите использовать VS Code, возможно, не стоит связываться с Dev Containers.