Mit PHP-Composer und der Konsole arbeiten
Entsprechend der obigen Namen Konventionen heißt unser Contao/PHP Container z.B. "website_contao".
Haben Sie in der ".env" Datei für COMPOSE_PROJECT_NAME einen anderen Eintrag gesetzt heißt Ihr Container halt anders - bitte dies bei folgenden Angaben berücksichtigen.
Öffnen Sie Ihr Terminal ( ich nutze GitBash ), wechseln in das Projekt Verzeichnis ( hier z.B. D:\tutorial ) und falls noch nicht geschehen starten die existierenden Container mit "docker-compose start".
Das u.a. hier benutzte PHP Image von ctsmedia [1] installiert bereits den PHP-Composer. Wir können diesen daher ohne weiteres auf der Konsole nutzen.
Mit dem Docker "exec" Befehl können Sie sich - quasi SSH like - in einen laufenden Container einklinken:
Code:
docker exec -ti -u www-data website_contao bash
Hinweis:
Wenn Sie hier eine Ausgabe erhalten wie: "the input device is not a TTY. If you are using mintty, try prefixing the command with 'winpty'"
Dies ist bedingt durch die Auswahl während der "Git für Windows" Installation [1]. Dann probieren Sie es so:
winpty docker exec -ti -u www-data website_contao bash
[1]
Git Konfiguration: MinTTY Git Bash
Wichtig
Wichtig ist hier die Option "-u www-data" (s. auch Beitrag "Vorbereitungen"). Ohne die Option sind Sie im Container als User "root" unterwegs.
Wenn Sie als "root" User Änderungen z.B. an der "composer.json" speichern würden, kann es u.a. über den Contao-Manager zu Zugriffsproblemen führen!
Sie befinden sich also somit im Container "website_contao" als User "www-data" im Verzeichnis "/var/www/share/project/" und können hier bel. Befehle absetzen:
Code:
pwd
php -v
php -i | grep memory_limit
vim composer.json
composer update
exit
Sie müssen nicht unbedingt direkt über die Bash-Shell des Containers arbeiten.
Mit Docker "exec" können Sie auch einzelne Befehle in der GitBash Konsole separat ausführen:
Code:
docker exec -t -u www-data website_contao pwd
docker exec -t -u www-data website_contao php -v
docker exec -t -u www-data website_contao composer require erdmannfreunde/euf_grid:^2.2
Kleiner Ausflug - die composer.json lokal editieren
Manchmal kann es notwendig werden die "composer.json" manuell zu editieren. Wer dies nicht im Container via "vim" erledigen möchte - hier ein Beispiel.
Laut dem Issue #238 [2] konnte es notwenig sein zwischenzeitlich den Eintrag
Code:
"conflict": {
"doctrine/dbal": "2.9.1"
}
in der "composer.json" zu setzen, damit das Installtool in der Contao Version 4.4.31 wieder funktioniert.
Wir kopieren uns die "composer.json" aus dem Container "website_contao" in das lokale Verzeichnis "_backup" mit:
Code:
docker cp website_contao:var/www/share/project/composer.json _backup
In unserem lokalen Verzeichnis "_backup" existiert nun die "composer.json" und wir tragen hier die Änderung ein.
Wir kopieren die geänderte Datei wieder in den Container und führen ein Composer update aus:
Code:
docker exec -u www-data website_contao cp _backup/composer.json .
docker exec -u www-data website_contao composer update
Hintergrund
Wir benutzen in der ersten Zeile nicht wieder den eigentlichen "Docker cp" Befehl, da wir hierüber nicht den User "www-data" mitschleifen können.
Stattdessen haben wir, analog z.B. zum Verzeichnis "src/templates", das Verzeichnis "_backup" in der "docker-compose.yml" als Volume eingetragen.
Entsprechend liegt also unsere lokal geänderte Datei auch wieder im Verzeichnis "_backup" innerhalb des Container vor.
Mit dem Befehl kopieren wir also die "composer.json" im Verzeichnis "_backup" des Containers in das Arbeitsverzeichnis "/var/www/share/project/" -
aber halt unter dem User "www-data"!
Dies ist entspricht dann auch der Vorgehensweise zum Backup und Restore vollständiger Contao Installation und Inhalte - siehe unten ...
[1] GitHub: ctsmedia PHP
[2] Installtool broken after update to 4.6.11 #238