我在 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