Назад | Перейти на главную страницу

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 как его корень. У меня есть привязка, поэтому я могу использовать свою IDE в моей основной ОС (Arch Linux) для редактирования файлов, а затем иметь доступ к ним для контейнера (без необходимости копировать / передавать их).

Я не знаю, что здесь делать. Что-то изменилось в обновлении? Нужно ли мне обновлять конфигурацию в моем Arch Linux? Почему контейнер не может получить доступ к портам? Что это за ошибка "ulimit"?

РЕДАКТИРОВАТЬ: Вот список пакетов, которые были обновлены / установлены за последнюю неделю в моей системе Arch Linux (основной): https://pastebin.com/5xyGpBrw

Эта проблема была вызвана изменением ядра Linux в Arch 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, скорее всего, вызваны недостаточными правами.

Итак, определенно что-то изменилось, как ваш контейнер запускается.