使用 Docker 安装 Discourse 用于开发

我找到了一个解决我问题的方法。这个方法有点复杂和取巧,但它确实有效。总而言之,升级到 Node.js 20.x.x 解决了我的问题

我创建了一个 Docker 镜像,它使用 Node.js v20.x.x 而不是 Discourse 开发 Docker 镜像默认使用的 v18.x.x。

我首先创建了这个 Dockerfile

# NAME: 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

然后我更新了 d/boot_devdocker run 命令,使其使用 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 --initd/rails sd/ember-cli,在 Docker 24 和 Fedora 39 中得到了一个可用的开发环境。


我不知道 Node 20.x.x 为什么 能解决这个问题。希望主开发镜像中的这个问题能被修复。我很乐意贡献一个拉取请求,但升级一个主要依赖项似乎超出了我随意提交一个拉取请求的范围。:smile_cat: 至少我现在可以继续工作了!