我正在运行 Arch Linux,最重要的是,Ubuntu 在 systemd-nspawn 容器中。我突然在让 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
我们无法判断更新是否更改了某些内容,因为您的问题中没有任何有关更新的信息。在系统停止工作之前,我们需要知道系统中安装了哪些更新。
错误
ulimit
和Apache启动失败很可能是由于权限不足造成的。所以,肯定有一些东西改变了你的容器的启动方式。
此问题是由 Arch Linux 中的 linux 内核更改引起的。从内核 4.14.5 开始,该
-U
选项(这是 的默认值systemd-nspawn
)创建一个非特权容器。它曾经创建一个特权,但现在不是了。这就是阻止 apache 打开端口 80 和 443 的原因。
解决方案是运行
sudo systemctl edit [email protected]
并删除该-U
选项。我还必须编辑/etc/systemd/nspawn/my-container.nspawn
并添加以下内容:感谢:https ://bbs.archlinux.org/viewtopic.php?pid=1756246#p1756246