Лучшее – враг хорошего или Приключения 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 смутил по-полной.

В общем повесил вместо сайта заглушку, что скоро вернусь, а сам полез изучать. И вот что выяснил:

  1. WordPress построен на базе контейнера php:8.0-fpm-alpine
  2. PHP8.0-fpm-alpine построен на базе alpine:latest
  3. 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

В тот момент, когда эта команда покажет нормальную дату и время, можно выдохнуть и попробовать перейти на официальный образ обратно.

Ну а для тех, кому хочется использовать официальный образ, вот краткая инструкция по этим самым “танцам с бубнами”:

  1. Скачиваем профиль безопасности по умолчанию Moby по ссылке отсюда
  2. Сохраняем его в той же папке, где лежит docker-compose.yaml вашего WordPress
  3. Открываем и правим во второй строке “SCMP_ACT_ERRNO” на “SCMP_ACT_TRACE”
  4. Редактируем docker-compose.yaml, сервис вашего WordPress, и добавляем строки:
    security_opt:
    - seccomp=./default.json
  5. Запускаем наш проект заново

На этом все тоже должно заработать.

Один ответ к «Лучшее – враг хорошего или Приключения WordPress в Docker-e»

Добавить комментарий

Ваш адрес email не будет опубликован.