Apache 无法在容器内运行

Apache 无法在容器内运行

我在 systemd-nspawn 容器中运行 Arch Linux 和 Ubuntu。我突然在启动 apache 时遇到问题(在容器内)。

几天前一切都运行正常,但现在却不行了。我不知道容器内部或外部的更新是否改变了什么。

在容器内部,我看到以下内容:

root@container:~# apachectl -k start
/usr/sbin/apachectl: 99: ulimit: error setting limit (Operation not permitted)
Setting ulimit failed. See README.Debian for more information.
(13)Permission denied: AH00072: make_sock: could not bind to address [::]:80
(13)Permission denied: AH00072: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
AH00015: Unable to open logs
Action '-k start' failed.
The Apache error log may have more information.

我使用lsof和进行了检查netstat,发现端口 80/443 上没有其他程序在运行。另外,那个“ulimit”错误是什么?那里发生了什么?

做过用于编辑设置以禁用私有网络并启用一些绑定挂载:sudo systemctl edit [email protected]

[Service]
ExecStart=
ExecStart=/usr/bin/systemd-nspawn --quiet --keep-unit --boot --link-journal=try-guest -U --settings=override --machine=%i \
        --bind-ro=/etc/resolv.conf:/etc/resolv.conf \
        --bind=/home/nticompass/Code/website:/opt/website

是的,容器内的 apache 配置设置为用作/opt/website其根目录。我已将其绑定安装,以便我可以使用主操作系统 (Arch Linux) 上的 IDE 来编辑文件,然后让容器能够访问它们(无需复制/传输它们)。

我不知道该怎么做。更新中有什么变化吗?我需要更新 Arch Linux 上的配置吗?为什么容器无法访问端口?那个“ulimit”错误是什么?

编辑:这是上周在我的 Arch Linux(主)系统上升级/安装的软件包列表:https://pastebin.com/5xyGpBrw

答案1

我们无法判断更新是否改变了某些内容,因为您的问题中没有关于更新的任何信息。我​​们需要知道在系统停止工作之前安装了哪些更新。

ulimit错误和 Apache 启动失败很可能是由于权限不足造成的。

因此,肯定有一些东西改变了容器的启动方式。

答案2

此问题是由 Arch Linux 中的 Linux 内核更改引起的。从内核 4.14.5 开始,该-U选项(默认为systemd-nspawn)会创建一个无特权容器。它过去会创建一个特权容器,但现在不再创建了。

这就是阻止 apache 打开端口 80 和 443 的原因。

解决方案是运行并删除该选项。我还必须编辑并添加以下内容:sudo systemctl edit [email protected]-U/etc/systemd/nspawn/my-container.nspawn

[Exec]
PrivateUsers=off

谢谢:https://bbs.archlinux.org/viewtopic.php?pid=1756246#p1756246

相关内容