Apache 不會在容器內執行
我正在執行 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 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啟動失敗很可能是由於權限不足造成的。所以,肯定有一些東西改變了你的容器的啟動方式。