Ich versuche lektor in einem Andock-Container auszuführen und habe ein Problem gefunden.Wie kann ich Lektor in einem Docker-Container ausführen?
Wenn ich meinen Quellcodeordner in meiner Dockerfile 'ADD' (oder 'COPY'), funktioniert alles perfekt, aber natürlich ist der Container dann nicht dynamisch und reagiert nicht auf Änderungen im Code.
Wenn ich stattdessen ein Volume verwende, wird der Container dynamisch und lektor wird erfolgreich neu erstellt und bedient meine Site, wenn ich Änderungen vornehme.
Allerdings, wenn ich gekommen, um die Website zu veröffentlichen, wird ein Fehler in das Protokoll des Behälters und es tritt eine nie endende Schleife:
Started build Debugging middleware caught exception in streamed response at a point where response headers were already sent. Traceback (most recent call last): File "/usr/local/lib/lektor/lib/python2.7/site-packages/lektor/admin/utils.py", line 18, in generate for event in chain(f(*args, **kwargs), (None,)): File "/usr/local/lib/lektor/lib/python2.7/site-packages/lektor/admin/modules/api.py", line 309, in generator for event in event_iter: File "/usr/local/lib/lektor/lib/python2.7/site-packages/lektor/publisher.py", line 639, in publish self.link_artifacts(path) File "/usr/local/lib/lektor/lib/python2.7/site-packages/lektor/publisher.py", line 602, in link_artifacts link(full_path, dst) OSError: [Errno 18] Invalid cross-device link
Minimal Dockerfile:
FROM python:2.7.11
RUN curl -sf https://www.getlektor.com/install.sh | \
sed '/stdin/d;s/input = .*/return/' | \
sh
Ich benutze eigentlich docker-komponieren.
Minimal Docker-compose.yml: version: '2' services: web: build: . ports: - "5000:5000" volumes: - .:/project working_dir: /project/source command: ['lektor', 'server', '--host', '0.0.0.0.']
(Mein Projektordner ist so strukturiert, dass die lektor Projektdatei und alle erwarteten lektor Ordner sind in der 'Quelle' Unterordner).
Eine schnelle google von 'ungültiger geräteübergreifender Link' zeigt etwas mit symbolischen Links. Was macht Lektor bei der Veröffentlichung (ich habe davon gehört, aber nicht benutzt)? Ist es möglich, dass es versucht, symbolische Verbindungen zwischen Volumes und etwas in dem Container zu erstellen? Vielleicht ein Problem dort? Vielleicht Berechtigungen. Scheint wie der Ort zu beginnen. – johnharris85
Ja, lektor versucht, Links zu verwenden, und es mag nicht, wie das Volume gemountet wird. – Owen
Es scheint, dass der Erstellungsprozess feste Verknüpfungen verwendet und der Ausgabeordner nicht im Quellcodepfad enthalten ist. Da der Quellcode ein bereitgestelltes Volume ist und sich der Erstellungsordner an einer anderen Position im Container befindet, sind die beiden Dateisysteme unterschiedlich und die feste Verbindung schlägt fehl. – Owen