Docker drupal10 symfony error

Fórumok

Üdv!

Egy D10-et tesztelgetek. Lokálisan megy is: Fc37 (selinux disabled).

Gondoltam felteszem egy docker konténerbe is:

FROM    fedora:latest

RUN dnf -y update
RUN dnf -y install php php-pdo php-dom php-gd memcached php-pecl-memcache sqlite
RUN curl -1sLf 'https://dl.cloudsmith.io/public/symfony/stable/setup.rpm.sh' | sudo -E bash
RUN dnf -y install symfony-cli

# VOLUME
VOLUME /drupal

# Expose port(s)
EXPOSE 8000


# WORK
WORKDIR /drupal

# ez még teszt: /bin/bash
ENTRYPOINT ........

A docker build --tag ...... megvan.

A helyi fájlokat felmountol-om a konténerbe futtatáskor:

docker run --rm -it -p 8000:8000 --name ... --hostname ... -v ....:/drupal localhost/image:dev

Ekkor futtatva hibát kapok a böngészőben, pedig van írási joga a fájlokra:

# symfony server:start

...

[Web Server ] Apr 18 23:40:18 |DEBUG  | PHP    Reloading PHP versions 
[Web Server ] Apr 18 23:40:18 |DEBUG  | PHP    Using PHP version 8.1.17 (from default version in $PATH) 
[Web Server ] Apr 18 23:40:18 |INFO   | PHP    listening path="/usr/sbin/php-fpm" php="8.1.17" port=39901
[PHP-FPM    ] Apr 18 23:40:18 |NOTICE | FPM    fpm is running, pid 36 
[PHP-FPM    ] Apr 18 23:40:18 |NOTICE | FPM    ready to handle connections 
[PHP-FPM    ] Apr 18 23:40:18 |NOTICE | FPM    systemd monitor interval set to 10000ms 
[Web Server ] Apr 18 23:40:25 |ERROR  | SERVER issue with server callback error="unable to fetch the response from the backend: malformed MIME header line: #1 /drupal/web/core/lib/Drupal/Core/Database/Database.php(445): Drupal\\sqlite\\Driver\\Database\\sqlite\\Connection::open()"
[Web Server ] Apr 18 23:40:25 |ERROR  | SERVER GET  (502) / ip="172.17.0.1"
[PHP-FPM    ] NOTICE: PHP message: PDOException: SQLSTATE[HY000]: General error: 8 attempt to write a readonly database in /drupal/web/core/lib/Drupal/Component/DependencyInjection/PhpArrayContainer.php on line 79 #0 /drupal/web/core/modules/sqlite/src/Driver/Database/sqlite/Connection.php(159): PDO->exec()
[PHP-FPM    ] #1 /drupal/web/core/lib/Drupal/Core/Database/Database.php(445): Drupal\sqlite\Driver\Database\sqlite\Connection::open()

...

Mit hagyok ki? (SQLite db: sites/default/files/.sqlite)

Hozzászólások

pedig van írási joga a fájlokra

Mármint kinek? :) Én ilyenkor azt szoktam, hogy docker exec konténernév bash paranccsal belépek, és megnézem úgy, hogy adott könyvtárra/fájlra (itt pl. ls -la /drupal/web/sites/default/files/) pontosan milyen jogosultságot lát a konténer (itt a www-data user szempontjából).

A többi lépés nekem jónak tűnik.

Amúgy ha csak a Drupalt akarod próbálgatni (függetlenül attól, hogy milyen disztró van alatta), akkor érdemes lehet inkább a hivatalos image-ek közül használni valamelyiket. Azokban minden fontos függőség be van lőve az adott Drupal-verzióhoz, max. saját Dockerfile-ban finomhangolod, ha kell valami plusz php extension. Annyi, hogy azoknál a /opt/drupal könyvtárba bind mountolod a host könyvtáradat. (Nyilván ez a jogosultságokon nem segít, de legalább a függőségekkel nem kell szórakozni, és így biztosan nem függőségi probléma miatt jönnek a hibák.)

Kipróbáltam gyorsan az általad megadott Dockerfile-lal: nekem megy rendesen, települ, ahogy kell, létrejön az adatbázisfájl is.

Szerintem túl sok mindent nem tudtam másként csinálni, mint te, csak a jogosultságok kiosztását (sudo chmod -R go+w web/sites/default szokott lenni nálam ilyen teszteknél dev. gépen). :)

Én a hosztgépen kipróbált rendszert mountoltam fel:

composer create-project drupal/recommended-project drupal 
cd drupal && php -d memory_limit=256M web/core/scripts/drupal quick-start demo_umami

Lehet, hogy nem így kellett volna... :o

Este megnézem, nem vagyok a gép előtt.

Na, akkor megoldódott, szuper. :)

Megnéztem, a konténerben a symfony cli a php-fpm-et az apache userrel (uid=48) futtatja (a shellt meg alapértelmezetten rootként adja a docker):

[root@fd41033e16c6 drupal]# ps -f -C php-fpm
UID        PID  PPID  C STIME TTY          TIME CMD
root        34    19  0 20:52 ?        00:00:00 php-fpm: master process (/root/.symfony5/php/4a6f0dccbc1b16c5f8cdd54c8adafc7262e4600d/fpm-8.1.17.ini)
apache      35    34  0 20:52 ?        00:00:00 php-fpm: pool www
apache      36    34  0 20:52 ?        00:00:00 php-fpm: pool www

Ha install után megnézed a .sqlite fájlt a host rendszerben, annak is a 48-as uid-val rendelkező user lesz a tulajdonosa (akár van ilyen felhasználó a hoston, akár nincs, nálam pl. nincs, úgyhogy az ls is csak számmal listázza).

Szerkesztve: 2023. 04. 19., sze – 11:11

Offtopik, de:

RUN dnf -y update
RUN dnf -y install php php-pdo php-dom php-gd memcached php-pecl-memcache sqlite
RUN curl -1sLf 'https://dl.cloudsmith.io/public/symfony/stable/setup.rpm.sh'| sudo -E bash
RUN dnf -y install symfony-cli

Így nem jobb? :)

RUN dnf -y update && RUN dnf -y install ... && curl ... && RUN dnf -y install symfony-cli && dnf clean all

Ha fedora a host OS-ed is, és a `/docker`-t nem tudod írni a konténerben, akkor én egy `-v ....:/drupal:Z`-t (`:Z` !) néznák meg elsőnek. Ne kérdezd.