Лучшее – враг хорошего или Приключения WordPress в Docker-e
Произошла недавно забавная ситуация: обновил все контейнеры я своего веб сайта и вдруг внезапно сайт перестал работать. “Ошибка соединения с базой данных” пишет и на этом все. И в логах контейнера WordPress ошибки типа
MySQL Connection Error: (2002) php_network_getaddresses: getaddrinfo failed: Try again
[05-Nov-2615 00:53:20 UTC] PHP Warning: mysqli::__construct(): php_network_getaddresses: getaddrinfo failed: Try again in Standard input code on line 22
MySQL Connection Error: (2002) php_network_getaddresses: getaddrinfo failed: Try again
WARNING: unable to establish a database connection to 'db:3306'
continuing anyways (which might have unexpected results)
Ну и раз сайт работает, а не может соединиться с базой данных, то я конечно же полез разбираться с этой самой базой. Но база оказалась не при чем и работала как часы.
Ладно, значит наверное он не понимает что такое “db”, а это значит, что наверное поломались линки в docker-compose, может ребята из докера что обновили или поменяли. Но нет, полез читать их доки, все должно работать и даже наоборот, внутри одной сети даже не требуется теперь указывать линки отдельно, контейнеры и так видят друг друга по имени сервиса. Залез в соседний контейнер, проверил – да, видят и даже из другого контейнера могу подключиться и забекапить базу данных.
Что ж, не база, не докер, остается только WP. Ок, полез в него.
pi@master-web4:[ pi ] $ docker exec -it wordpress /bin/sh
/var/www/html # ping db
ping: bad address 'db'
/var/www/html # nslookup db
nslookup: clock_gettime(MONOTONIC) failed
/var/www/html #
Явный непорядок, но если пинг наводил на мысли о проблемах все-таки с линками, то nslookup смутил по-полной.
В общем повесил вместо сайта заглушку, что скоро вернусь, а сам полез изучать. И вот что выяснил:
- WordPress построен на базе контейнера php:8.0-fpm-alpine
- PHP8.0-fpm-alpine построен на базе alpine:latest
- alpine:latest (3.13) обновился на musl 1.2 (ссылка). А он на raspberry pi без танцев с бубнами больше не пи-пи
В общем с бубнами танцевать не хотелось, пока не будет четкого понимания куда и кто прийдет, поэтому просто пересобрал WordPress на базе alpine3.12 и все взлетело, запинговалось и за энэслокапилось.
Если кому-то тоже пришлось столкнуться с подобным и нет желания разбираться самому, можете использовать мой образ – istitch07/wordpress-alpine3.12-rpi
Для этого просто замените в docker-compose образ для WordPress c
image: wordpress:php8.0-fpm-alpine
на
image: istitch07/wordpress-alpine3.12-rpi:latest
После этого ваш сайт должен ожить.
P.S. Проверить, когда же alpine:latest начнет работать как ожидается, можно командой
docker run --rm alpine:latest date
В тот момент, когда эта команда покажет нормальную дату и время, можно выдохнуть и попробовать перейти на официальный образ обратно.
Ну а для тех, кому хочется использовать официальный образ, вот краткая инструкция по этим самым “танцам с бубнами”:
- Скачиваем профиль безопасности по умолчанию Moby по ссылке отсюда
- Сохраняем его в той же папке, где лежит docker-compose.yaml вашего WordPress
- Открываем и правим во второй строке “SCMP_ACT_ERRNO” на “SCMP_ACT_TRACE”
- Редактируем docker-compose.yaml, сервис вашего WordPress, и добавляем строки:
security_opt
:- seccomp=./default.json
- Запускаем наш проект заново
На этом все тоже должно заработать.
Один ответ к «Лучшее – враг хорошего или Приключения WordPress в Docker-e»