-
-
Notifications
You must be signed in to change notification settings - Fork 115
vaccipy als docker container #375
Comments
wird glaube ich schwierig. Ich habs lokal gemacht und konnte den Termin nicht buchen, da vaccipy Chrome nicht starten konnte. Sehr ärgerlich. |
Darf ich fragen, wie genau du das gemacht hast? @marvin-te |
In meiner Frage gestern #361 wurde mir bestätigt, dass für die Buchung des Termins eine GUI notwendig ist. Mir ist kein Weg bekannt, eine GUI Application in einem Docker Container laufen zu lassen. |
Daher ist es, denke ich, nicht sinnvoll möglich, vaccipy in einem Docker Container laufen zu lassen. |
Die habe ich leider nicht gesehen, danke für den Hinweis. Ist es denn prinzipiell möglich, valide Cookies headless zu generieren oder ist das eine Sache der Implementierung? Also wenn ich das richtig verstanden habe braucht man für valide Cookies die Mausbewegungen und Klicks. |
Wenn du es headless hinbekommst wäre klasse. Wir haben es leider nicht geschafft. Die Cookies werden immer geblockt. |
Es ist durchaus möglich, GUI-Anwendungen in einem Container laufen zu lassen, allerdings nicht ganz intutiv. Mit Chrome/Chromium habe ich das nicht probiert, aber generell sieht der Aufruf (ganz grob) so aus: args=()
# 1. export xauth cookie to the container
xauth_file='/tmp/container.xauth'
touch -- "${xauth_file}"
xauth nextract - "${DISPLAY}" | sed -e '/^..../ffff/' | xauth -f "${xauth_file}"
args+=( "--volume=${xauth_file}:/home/.../.Xauthority:ro" )
# 2. export X11 display information
args+=( "--env=DISPLAY=unix${DISPLAY}" "--volume=/tmp/.x11-unix:/tmp/.x11-unix:ro" )
# 3. export Wayland display information
args+=( "--env=WAYLAND_DISPLAY" "--env=XDG_RUNTIME_DIR" "--volume=${XDG_RUNTIME_DIR}/${WAYLAND_DISPLAY}:${XDG_RUNTIME_DIR}/${WAYLAND_DISPLAY}" )
# run it
podman run --rm -it "${args[@]}" vaccipy Falls auf dem Host X11 läuft kann man Schritt 3 weg lassen; falls Wayland läuft, dann ist Schritt 1 nicht nötig. Getestet habe ich das nur mit Podman, sollte aber mit Docker ganz genauso funktionieren. Möglicherweise müssen für Chrome/Chromium noch Einträge aus |
Podman macht vieles einfacher als Docker, ähnlich wie Singularity - was bei Docker immer ein gebastel war um X11 rauszubekommen ging z.B. bei mir mit Singularity "einfach so". Gehen tuts, aber "schön" ist es nicht. |
Ich habe gerade gesehen, dass auf #418 keine positive Resonanz folgte, gerne kann meine PR (#424) daher kommentarlos geschlossen werden. ProblemstellungDas hier beschriebene Problem ist bereits vielfach hervorragend gelöst worden, u.a. für UI Tests in Docker. Eine solche Lösung bietet auch Selenium, deren Bibliothek bereits in LösungsvorschlagSelenium bietet die gängigen Browser wie Google Chrome als Docker Image auf Docker Hub an. Passend dazu, kann in Diese Funktionen sind out-of-the-box verfügbar und können in Docker Compose wie folgt kombiniert werden: version: "3.9"
services:
google-chrome:
environment:
# Necessary to allow connections other than from the local address.
- JAVA_OPTS=-Dwebdriver.chrome.whitelistedIps=
image: selenium/standalone-chrome:91.0
ports:
- "4444:4444"
vaccipy:
build: .
# Arguments passed to vaccipy.
command: ${VACCIPY_ARGUMENTS}
environment:
- VACCIPY_CHROME_REMOTE_ADDRESS=http://google-chrome:4444/wd/hub
image: vaccipy
volumes:
- type: bind
read_only: true
source: ${VACCIPY_CONTACT_ADDRESS_PATH}
target: /vaccipy/kontaktdaten.json Der Service FROM python:3.9.5-buster
WORKDIR vaccipy
RUN apt-get update && apt-get install -y jq
ADD . .
RUN python -m pip install -r requirements.txt
RUN chmod +x ./wait-for-google-chrome.sh
ENTRYPOINT ./wait-for-google-chrome.sh python3 main.py search -f kontaktdaten.json -r Da das Deployment nicht auf Interaktion ausgelegt ist, habe ich zwei neue Umgebungsvariablen eingeführt: Mit dieser Implementation konnte ich erfolgreich einen Termin such und buchen: Log aus Docker Compose
Anmerkung: die obige Buchung erfolgte zu Testwecken und wurde umgehend storniert. Die angezeigten Uhrzeiten enstammen einer anderen Zeitzone und stimmen nicht mit UTC+0200 überein. EinschränkungenAutomatisierungObgleich die obige Implementation technisch einwandfrei funktioniert, ermöglicht sie keine Automation der Terminbuchung. Es ist weiterhin notwendig, den Termin per Mail manuell zu bestätigen. Es entzieht sich dem Zweck von SicherheitWie der Docker Compose Datei zu entnehmen, habe ich alle Verbindungen zur Instanz von Google Chrome zugelassen. Es ist daher denkbar, dass Dritte auf die Instanz von Google Chrome über den Docker Container zugreifen können. Standardmäßig lässt UmgebungsvariablenEs ist mir bisher nicht gelungen, die neu eingeführten Umgebungsvariablen über die Umgebung (hier Bemerkungen
Ich möchte mich an dieser Stelle für das Engagement aller Beteiligten an dieser Software bedanken, sie löst ein reales Problem auf eine praktische Art & Weise. 👏🏼 |
@dnlfrst wirst du ein out-off-tree Dockerfile maintainen? |
Hey,
es wäre cool, wenn es vaccipy auch als docker container geben würde.
The text was updated successfully, but these errors were encountered: