我猜应该是 d/rake admin:create……
很遗憾,不行 ![]()
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。
我建议停止、删除您的容器并重新开始,并留意控制台中显示的错误。
我一直在尝试使用 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 之外的任何命令都会抛出该错误。
将继续调查并尝试找出解决方案。
我找到了一个解决我问题的方法。这个方法有点复杂和取巧,但它确实有效。总而言之,升级到 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_dev 的 docker 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 --init、d/rails s 和 d/ember-cli,在 Docker 24 和 Fedora 39 中得到了一个可用的开发环境。
我不知道 Node 20.x.x 为什么 能解决这个问题。希望主开发镜像中的这个问题能被修复。我很乐意贡献一个拉取请求,但升级一个主要依赖项似乎超出了我随意提交一个拉取请求的范围。
至少我现在可以继续工作了!
有人在树莓派上成功运行过吗?(我知道生产配置是受支持的)。需要进行哪些更改/配置?
我遇到了:
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```
联系代理提供商,确保允许这些调用?
运行 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
有什么建议吗?
你是否先运行了 d/boot_dev?
是的,我确实输入了,谢谢。要重新开始,我需要从 Docker GUI 以及 discourse 存储库文件夹中删除容器吗?


