Install Discourse for development using Docker

我猜应该是 d/rake admin:create……

很遗憾,不行 :frowning:
OCI runtime exec failed: exec failed: unable to start container process: exec: "bin/rake": stat bin/rake: no such file or directory: unknown

d/boot_dev --init 的结果是什么?

正在使用源: /home/martyn/discourse
正在使用数据:   /home/martyn/discourse/data/postgres
release: 从 discourse/discourse_dev 拉取
Digest: sha256:b64199f510bd9831af81ba8268bef3beff2abb45d0a264a0e29b35cfc3986f05
状态: 镜像已是最新版本 discourse/discourse_dev:release
docker.io/discourse/discourse_dev:release
docker: 守护进程的错误响应: 冲突。容器名 "/discourse_dev" 已被容器 "44c83548a9a9060716aa7d4fd803e239227f48375625f1d27da19b3d4162c56a" 使用。您必须删除(或重命名)该容器才能重用该名称。
请参阅 'docker run --help'。

好的,您已经构建了容器。

这很奇怪。我刚刚在 WSL 中从头开始安装,对我来说是有效的,尽管我需要手动运行 d/exec yarn

我建议停止、删除您的容器并重新开始,并留意控制台中显示的错误。

2 个赞

我一直在尝试使用 Docker 说明设置 Discourse 开发环境,但在运行任何 Yarn 命令时都会遇到错误。Ruby 命令运行正常,但运行 d/yarn(及其任何子命令)时会因以下错误而失败:

discoursec(v3.1.3) $ d/exec yarn -v

<--- Last few GCs --->


<--- JS stacktrace --->


#
# Fatal javascript OOM in MemoryChunk allocation failed during deserialization.
#

我使用的是 Fedora 39 和 Docker 24.0.7。我除了从 Git 检出 Discourse 并切换到 v3.1.3 标签外,没有做任何修改。

有人以前遇到过这个错误吗?谢谢!

听起来像是内存不足:

它有多少内存?

我的机器有 64 GB 内存,而且我认为我没有对 Docker 的内存使用设置任何限制。我只是运行了一个标准的 Docker 安装。


编辑:有趣的是,Node 命令可以工作,但 Yarn 失败了:

discourse(v3.1.3*) $ d/exec node -v
v18.17.1
discourse(v3.1.3*) $ d/exec yarn -v

<--- Last few GCs --->


<--- JS stacktrace --->


#
# 在反序列化期间分配 MemoryChunk 失败,发生致命的 javascript OOM。
#

快速更新:进一步测试后,Node 命令也失败了:

discourse(v3.1.3*) $ d/exec node --help

<--- Last few GCs --->


<--- JS stacktrace --->


#
# Fatal javascript OOM in MemoryChunk allocation failed during deserialization.
#

除了 d/exec node -v 之外的任何命令都会抛出该错误。:thinking: 将继续调查并尝试找出解决方案。

我找到了一个解决我问题的方法。这个方法有点复杂和取巧,但它确实有效。总而言之,升级到 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: 至少我现在可以继续工作了!

有人在树莓派上成功运行过吗?(我知道生产配置是受支持的)。需要进行哪些更改/配置?

我遇到了:

WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested

然后容器不断崩溃并重启。

更新:啊,我看到支持的镜像还没有引入?比较:

https://hub.docker.com/r/discourse/base/tags

(这是受支持的)

https://hub.docker.com/r/discourse/discourse_dev/tags

后者没有列出 arm64 版本……

有人在 Mac OS (13.6.3) (Intel) 上成功运行了 Docker 中的 Discourse 吗……并且可以分享他们如何解决 Error: Cannot find module 'esbuild' 错误?

我注意到在 boot_dev 应用程序中,yarn 从未在顶层目录运行,只在 app/assets/javascripts/discourse 中运行:

echo "Yarn install..."
"${SCRIPTPATH}/exec" yarn install --cwd app/assets/javascripts/discourse

因此,esbuild 未安装是有道理的,因为它是顶层 package.json 中描述的依赖项。

但是,此 package.json 无法在容器外安装,因为将安装错误版本的 esbuild(Mac 而不是 Linux……但容器需要 Linux)。

在“安装 gems”上方的一行中,boot_dev 是否应该如下所示?

echo "Installing top-level package.json ..."
"${SCRIPTPATH}/exec" yarn install

当我添加类似这样的行时,我可以跳过 esbuild 错误,进入迁移步骤……

是否已修复?我安装并运行了一个,但第二天回来运行 d/boot_dev 时,它给了我这个警告,并且不再创建我的容器。

使用 Docker 的架构仿真来开发 Discourse 可能会失败。
请尝试原生开发安装。
正在使用源:/Users/n_selvidge/discourse
正在使用数据: /Users/n_selvidge/discourse/data/postgres```
1 个赞

如何通过 http_proxy 安装 discourse 开发版?

联系代理提供商,确保允许这些调用?

运行 d/rails s 时出现相同的错误,

/home/discourse/.bundle/gems/ruby/3.2.0/gems/activerecord-7.0.8.1/lib/active_record/connection_adapters/postgresql_adapter.rb:87:in `rescue in new_client': connection to server at \"10.169.51.142\", port 5432 failed: Connection refused (ActiveRecord::ConnectionNotEstablished)
	Is the server running on that host and accepting TCP/IP connections?

任何帮助都将不胜感激!

d/rails s 返回:
Error response from daemon: No such container: discourse_dev

有什么建议吗?

1 个赞

你是否先运行了 d/boot_dev

1 个赞

您好,可以将其绑定到 0.0.0.0 吗?

image

是的,我确实输入了,谢谢。要重新开始,我需要从 Docker GUI 以及 discourse 存储库文件夹中删除容器吗?