Ubuntu

Apache 不會在容器內執行

  • December 20, 2017

我正在執行 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.

我檢查了使用lsofnetstat但埠 80/443 上沒有執行其他任何東西。另外,那個“ulimit”錯誤是什麼?那裡發生了什麼事?

確實使用sudo systemctl edit systemd-nspawn@my-container.service編輯設置來禁用私有網路並啟用一些綁定掛載:

[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

此問題是由 Arch Linux 中的 linux 核心更改引起的。從核心 4.14.5 開始,該-U選項(這是 的預設值systemd-nspawn)創建一個非特權容器。它曾經創建一個特權,但現在不是了。

這就是阻止 apache 打開埠 80 和 443 的原因。

解決方案是執行sudo systemctl edit systemd-nspawn@my-container.service並刪除該-U選項。我還必須編輯/etc/systemd/nspawn/my-container.nspawn並添加以下內容:

[Exec]
PrivateUsers=off

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

我們無法判斷更新是否更改了某些內容,因為您的問題中沒有任何有關更新的資訊。在系統停止工作之前,我們需要知道系統中安裝了哪些更新。

錯誤ulimit和Apache啟動失敗很可能是由於權限不足造成的。

所以,肯定有一些東西改變了你的容器的啟動方式。

引用自:https://serverfault.com/questions/888790