当 pups 尝试创建符号链接时,Discourse-setup 失败

我正在尝试在我的 fedora-coreos 服务器上安装 discourse,但不太顺利。我首先需要创建一个 /var/shared/ 目录并相应地更新模板,因为 coreos 上的 / 是不可变的。这可以正常工作,数据库也会启动,但随后 pups 在尝试创建符号链接时失败,并出现以下错误:
Pups::ExecError: cd /var/www/discourse && bash -c "ln -s /var/shared/log/rails/{production,production_errors,unicorn.stdout,unicorn.stderr,sidekiq}.log /var/www/discourse/log" failed with return #<Process::Status: pid 241 exit 1>
我尝试创建 /var/www/ 目录并设置最宽松的权限,只是为了看看是否有帮助。可能是用户不正确。我注意到有一个 chown 语句,用户是 ‘discourse’,但我认为这可能是在容器内。我尝试创建 /var/shared//var/www/,并将所有权设置为普通用户,但我认为这可能也是错误的,因为 discourse-setup 是以 root 身份运行的。
我更熟悉 podman 而不是 docker,所以可能是我犯了其他错误。我禁用了 selinux,看看是否有帮助。
非常感谢您的帮助…… :slight_smile:

编辑。
下面的日志

cd /var/www/discourse && bash -c "ln -s /var/shared/log/rails/{production,production_errors,unicorn.stdout,unicorn.stderr,sidekiq}.log /var/www/discourse/log"
ln: failed to create symbolic link '/var/www/discourse/log/production.log': File exists
ln: failed to create symbolic link '/var/www/discourse/log/production_errors.log': File exists
ln: failed to create symbolic link '/var/www/discourse/log/unicorn.stdout.log': File exists
ln: failed to create symbolic link '/var/www/discourse/log/unicorn.stderr.log': File exists
ln: failed to create symbolic link '/var/www/discourse/log/sidekiq.log': File exists
I, [2025-06-15T16:41:06.444013 #1]  INFO -- : 
I, [2025-06-15T16:41:06.445624 #1]  INFO -- : Terminating async processes
I, [2025-06-15T16:41:06.445825 #1]  INFO -- : Sending INT to HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/15/bin/postmaster -D /etc/postgresql/15/main pid: 42
I, [2025-06-15T16:41:06.446165 #1]  INFO -- : Sending TERM to exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf pid: 91
2025-06-15 16:41:06.446 UTC [42] LOG:  received fast shutdown request
91:signal-handler (1750005666) Received SIGTERM scheduling shutdown...
91:M 15 Jun 2025 16:41:06.451 # User requested shutdown...

该错误源于尝试为日志文件创建符号链接,但具有这些名称的文件已存在。

在运行 discourse-setup 之前,请删除 /var/www/discourse/log 目录中类似 production.logproduction_errors.log 等文件。这将允许符号链接命令成功执行。
示例:

rm /var/www/discourse/log/production.log
rm /var/www/discourse/log/production_errors.log
rm /var/www/discourse/log/unicorn.stdout.log
rm /var/www/discourse/log/unicorn.stderr.log
rm /var/www/discourse/log/sidekiq.log

然后,重新运行设置。

另外,容器内的文件/文件夹所有权通常应属于 discourse 用户,而不是 root 或您的主机用户。如果文件由错误的用户在主机上预先创建或具有不正确的权限,设置可能会失败。