尝试启动Docker (Oracle VM)时发生致命错误

大家好 - 我是 Discourse 的新手(看起来很棒!),虽然我具备一些通用技术技能,但我认为在 Docker/Linux 虚拟机领域,我仍属于新手。

我有一台运行 Oracle Linux 的免费 Oracle VM。我已经完成了以下步骤(https://blogs.oracle.com/developers/install-run-discourse-for-free-in-the-oracle-cloud),并正在执行 ./discourse-setup 步骤。

我 consistently 收到以下错误消息……尝试运行 discourse doctor 但无济于事。希望有人能指点我正确的方向,看看这里可能出了什么问题。提前非常感谢!- Tim

[2021-06-11T04:09:29.733935 #1]  INFO -- : > HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/13/bin/postmaster -D /etc/postgresql/13/main
I, [2021-06-11T04:09:29.735773 #1]  INFO -- : > sleep 5
2021-06-11 04:09:30.320 GMT [54] LOG:  0 8kB 超出了参数 "shared_buffers" 的有效范围(16 .. 1073741823)
2021-06-11 04:09:30.322 UTC [54] FATAL:  配置文件 "/etc/postgresql/13/main/postgresql.conf" 包含错误
I, [2021-06-11T04:09:34.739847 #1]  INFO -- : 
I, [2021-06-11T04:09:34.740097 #1]  INFO -- : > su postgres -c 'createdb discourse' || true
createdb: 错误:无法连接到数据库 template1:无法连接到服务器:没有此类文件或目录
	服务器是否在本地运行并接受
	Unix 域套接字 "/var/run/postgresql/.s.PGSQL.5432" 上的连接?
I, [2021-06-11T04:09:34.860266 #1]  INFO -- : 
I, [2021-06-11T04:09:34.860745 #1]  INFO -- : > su postgres -c 'psql discourse -c "create user discourse;"' || true
psql: 错误:无法连接到服务器:没有此类文件或目录
	服务器是否在本地运行并接受
	Unix 域套接字 "/var/run/postgresql/.s.PGSQL.5432" 上的连接?
I, [2021-06-11T04:09:35.023423 #1]  INFO -- : 
I, [2021-06-11T04:09:35.023810 #1]  INFO -- : > su postgres -c 'psql discourse -c "grant all privileges on database discourse to discourse;"' || true
psql: 错误:无法连接到服务器:没有此类文件或目录
	服务器是否在本地运行并接受
	Unix 域套接字 "/var/run/postgresql/.s.PGSQL.5432" 上的连接?
I, [2021-06-11T04:09:35.137806 #1]  INFO -- : 
I, [2021-06-11T04:09:35.138325 #1]  INFO -- : > su postgres -c 'psql discourse -c "alter schema public owner to discourse;"'
psql: 错误:无法连接到服务器:没有此类文件或目录
	服务器是否在本地运行并接受
	Unix 域套接字 "/var/run/postgresql/.s.PGSQL.5432" 上的连接?
I, [2021-06-11T04:09:35.257190 #1]  INFO -- : 
I, [2021-06-11T04:09:35.257476 #1]  INFO -- : 终止异步进程


FAILED
--------------------
Pups::ExecError: su postgres -c 'psql discourse -c "alter schema public owner to discourse;"' 失败,返回 #<Process::Status: pid 80 exit 2>
失败位置:/pups/lib/pups/exec_command.rb:112:in `spawn'
执行失败,参数为 "su postgres -c 'psql $db_name -c \"alter schema public owner to $db_user;\"'"
14ef6216494c846091ea6ce48143e2f25018b9d2579b6d4d0021d605f7f5e145
** 引导失败 ** 请向上滚动并查找更早的错误消息,可能不止一条。

@Meathead40
我可能遇到了同样的问题。

我曾在六月成功在 Oracle 免费实例上部署了 Discourse。现在我重新运行了设置脚本,以更改几个与邮件设置相关的参数。
我在日志中追踪到的第一个错误是:FATAL: 配置文件 "/etc/postgresql/13/main/postgresql.conf" 包含错误
但在我的情况下,该文件并不存在。此外,PostgreSQL 服务并未运行(甚至根本不存在该服务)。

你成功解决过这个问题吗?还有其他人遇到过类似情况吗?

祝好,
Stef

你能分享一下 free -m --si 的输出吗?

你检查过容器内部吗?你是否也看到了关于 shared_buffers 太小的日志条目?

在我的情况下:

# /var/discourse/launcher enter app
# egrep shared_buffers /etc/postgresql/13/main/postgresql.conf
shared_buffers = 128MB
exit

你好 @Falco,这是命令的输出结果:
total used free shared buff/cache available
Mem: 703 359 86 7 257 207
Swap: 8388 246 8142

你好 @Ed_S,我收到了以下消息:

/var/discourse/launcher enter app
无法连接到 Docker 守护进程——请确认它正在运行且您有访问权限

你应该在这里看到相同的文件:
/var/discourse/shared/standalone/postgres_data/postgresql.conf

理想情况下,在显示配置中存在错误的日志条目之前,你会看到一行描述具体错误的内容。

你可能会在以下位置找到日志:
/var/discourse/shared/standalone/log/var-log/postgres/current

感谢提供的建议。我收集到了更多信息。

以下是日志中错误发生时间附近的内容(之前的消息来自数天前):

2021-08-02 13:33:16.980 UTC [2419] LOG:  received smart shutdown request
2021-08-02 13:33:28.273 UTC [2419] LOG:  background worker "logical replication launcher" (PID 2442) exited with exit code 1
2021-08-02 13:33:28.344 UTC [2437] LOG:  shutting down
2021-08-02 13:33:28.552 UTC [2419] LOG:  database system is shut down

我还获取了共享缓冲区配置:

shared_buffers = 128MB     # min 128kB
#wal_buffers = -1            # min 32kB, -1 sets based on shared_buffers

嗯,我们可以稍微回顾一下:每当看到那个 FATAL 错误时,它前面是哪几行代码?

好的,再次感谢您的支持。

我正在对现有安装运行设置脚本,目的是更改几个配置参数。脚本的第一部分检测到了以下内容:

sudo ./discourse-setup 
which: no docker.io in (/sbin:/bin:/usr/sbin:/usr/bin)
which: no docker.io in (/sbin:/bin:/usr/sbin:/usr/bin)
The configuration file containers/app.yml already exists!

. . . reconfiguring . . .


Saving old file as app.yml.2021-08-03-102829.bak
Stopping existing container in 5 seconds or Control-C to cancel.
+ /bin/docker stop -t 30 app
app

Found 0GB of memory and 1 physical CPU cores
setting db_shared_buffers = 0MB
setting UNICORN_WORKERS = 0
containers/app.yml memory parameters updated.

随后继续传递所有配置参数并最终开始构建……这应该是您正在寻找的关键线索:

2021-08-03 10:30:37.709 GMT [55] LOG:  0 8kB is outside the valid range for parameter "shared_buffers" (16 .. 1073741823)
2021-08-03 10:30:37.713 UTC [55] FATAL:  configuration file "/etc/postgresql/13/main/postgresql.conf" contains errors

这可不是个好兆头!该数值应直接来自以下命令的输出:

free -g --si | awk ' /Mem:/  {print $2} '

这显示的是 703 MB,从官方标准来看,这对于 Discourse 的正常运行来说太小了。如果您愿意冒险(且无法获得任何支持),可以编辑 discourse_docker/discourse-setup at master · discourse/discourse_docker · GitHub 中的魔术数字 990。

我认为您需要一个内存更大的实例。

是的,到目前为止该实例一直运行正常,安装时已禁用内存检查。这与这篇帖子有些关联:Discourse won't install because I have 960MB of ram and not 1GB - Discourse System Administration - Unix Linux Community

配置文件中的检查仍然处于禁用状态,但我怀疑它被覆盖了?我会尝试按您指出的方式修改该值,并报告结果。

嗯,这很大程度上取决于你在那里做了什么。

我成功完成了配置并重新构建。步骤如下:

  • 在 /var/discourse/discourse-setup 中注释掉内存检查(#check_disk_and_memory)(不确定这是否必要)
  • 在 /var/discourse 目录下运行命令 sudo ./discourse-setup(这将生成文件 /var/discourse/containers/app.yml 并尝试继续构建,但会按照上述描述失败)
  • 编辑 app.yml,显式设置 db_shared_buffers: “128MB” 和 UNICORN_WORKERS: 1
  • 在 /var/discourse 目录下运行 sudo ./launcher rebuild app 以启动重新构建

我知道这处于要求的边缘,但我会密切关注实例的运行情况。

感谢支持

1 个赞

很高兴问题已解决。在相关的链接讨论以及此处引用的讨论中,我认为将“魔法内存释放”数值从 990 改为代表您自身系统的数值要合理得多。“禁用内存检查”实际上带来了麻烦。

我清楚地看到,Discourse 团队需要设定某个下限值,以区分受支持和不受支持的配置。他们已正式将其设定为 1GB,并放宽至 990。但在我看来,960 与 990 非常接近,且产生原因相似。另一方面,703 则显得差异巨大!

你好,Ed,
我同意,我会修改这个数字。我对如此低的内存感到相当惊讶。Oracle(免费层级)实例规格标明内存为 1GB,但实际可用内存却只有大约 60-70%。我有点困惑,不清楚造成这种情况的原因。

之前已经有人提到过——我认为 Oracle 有点不厚道,实际提供的内存远少于 1GB,但在描述时却向上取整:

编辑:参见相关博客

或许最重要的一条被遗漏的提示是:不要使用默认的服务器镜像。Discourse 需要 1GB 内存(或大致相当),而 Oracle Linux 镜像出于某种原因无法提供足够的内存。我不确定 CentOS 是否可行,但 Ubuntu 镜像没问题。只需确保选择完整安装2,而不是“最小化”安装。

2 个赞

我怀疑默认的 Oracle Linux 包含了许多安装 Discourse 所不需要的组件。想必它的主要用途是托管 Oracle 数据库服务器。:wink: 幸运的是,Ubuntu 镜像运行良好。我的 测试站点/评论主机 仍在运行。(不过活动不多。)

1 个赞