Я нашел решение своей проблемы. Процесс немного запутанный и «костыльный», но он работает. Вкратце: обновление до Node.js 20.x.x устранило мою проблему.
Я создал образ Docker, использующий Node.js v20.x.x вместо стандартного v18.x.x, который применяется в образе разработки Discourse.
Для начала я создал этот Dockerfile:
# ИМЯ: discourse_node20
FROM discourse/discourse_dev:release
# обновление node до LTS 20.x.x
ENV NODE_MAJOR=20
RUN apt-get update
RUN apt-get install -y ca-certificates curl gnupg
RUN mkdir -p /etc/apt/keyrings
RUN curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
RUN echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list
RUN apt-get update
RUN apt-get install nodejs -y
Затем я собрал образ: docker build -t discourse_node20 - < Dockerfile
После этого я обновил команду docker run в d/boot_dev, чтобы использовать образ discourse_node20 и не тянуть discourse/discourse_dev:release, так как он больше не нужен. Вот обновленная команда в d/boot_dev:
# закомментируйте строку ниже
# docker pull discourse/discourse_dev:release
docker run \
-d \
-p $local_publish:8025:8025 \
-p $local_publish:3000:3000 \
-p $local_publish:4200:4200 \
-p $local_publish:9292:9292 \
-p $local_publish:9405:9405 \
-v "$DATA_DIR:/shared/postgres_data:delegated" \
-v "$SOURCE_DIR:/src:delegated" \
-e UNICORN_BIND_ALL=true \
-e NODE_OPTIONS=--max_old_space_size=8192 \
$mount_plugin_symlinks \
$ENV_ARGS \
--hostname=discourse \
--name=discourse_dev \
--restart=always \
discourse_node20 /sbin/boot
После этого мне удалось успешно выполнить d/boot_dev --init, d/rails s и d/ember-cli, получив рабочую среду разработки в Docker 24 и Fedora 39.
Я не знаю, почему Node 20.x.x решает проблему. Надеюсь, это будет исправлено в основном образе разработки на стороне разработчиков. Я был бы рад внести вклад через pull request, но обновление основной зависимости кажется чем-то большим, чем просто случайный PR от меня.
Ну, по крайней мере, сейчас я не заблокирован!