Laden...

Docker Container - keinerlei Ausgabe

Erstellt von Taipi88 vor 4 Jahren Letzter Beitrag vor 4 Jahren 1.529 Views
Taipi88 Themenstarter:in
1.029 Beiträge seit 2010
vor 4 Jahren
Docker Container - keinerlei Ausgabe

Hi,

ich bin nicht ganz sicher, ob es in's C#-Forum gehört - wollte trotzdem versuchen, ob mir jemand einen Tipp geben kann.

Ich wollte meinen ersten Docker-Container bauen - bin grundlegend so vorgegangen, dass ich ein Minimalprogramm gebaut habe - das auf Github geschoben habe - und via Docker-Hub wird das ganze automatisch gebaut. (Das Projekt ist fast noch jungfräulich)

Ich habe jede Kleinigkeit comittet und damit auch immer bauen lassen - zudem habe ich jeweils lokal mit Docker Desktop (Linux Container) ebenfalls jeden kleinen Teil getestet. (Also: docker build + docker run) Zusätzlich habe ich alle paar Commits auf meinem Ubuntu-Server das Image gezogen und ebenfalls laufen lassen, was zu Anfang gut funktionierte.

Mein eigentliches Problem:
a) Der Container lässt sich lokal bauen und testen und funktioniert wunderbar
b) Docker-Hub kann den Container auch problemlos bauen
c) Wenn ich aber meinen Ubuntu-Server das Image ziehen lasse (läuft dort via Docker-Compose) - dann zieht er zwar brav alles - lässt sich dort allerdings nicht ordnungsgemäß ausführen - und ich bekomme keinerlei Logausgabe und damit auch nichts, was ich debuggen könnte...

Was ich bereits getestet habe:
a) via docker-compose logs ist keine Ausgabe zu erhalten
b) via docker pull + docker run und attach ist keine Ausgabe zu erhalten

Kann mir jemand einen Tipp geben, was ich noch tun kann, damit ich zumindest die Chance erhalte zu sehen, was denn hier nicht funktioniert? Falls relevant:
a) Source: https://github.com/IInvocation/Youtube-DL-UI
b) Docker Repo: https://cloud.docker.com/u/iinvocation/repository/docker/iinvocation/youtubedlui
c) Docker Desktop Version: 2.1.0.4
d) Docker Version auf Ubuntu: 19.03.4
e) Meine Änderungen am Dockerfile sind noch recht marginal - habe grundsätzlich die Copy-Anweisungen so modifiziert, dass das Docker-Hub einen Build machen kann, definiere 3 Volumes und installiere via apt-get install lediglich 2 Programme.

Kurzum: Kann mir jemand einen Stups geben wie ich rausfinde was überhaupt das Problem ist?

Da ich keinerlei Ausgabe erhalte würde ich zwar grundsätzlich vermuten, dass der Container aktuell nicht in der Lage ist dotnet auszuführen - aber zumindest das hatte ich eigentlich durch diese ganzen kleinen Tests ausgeschlossen 😕

16.807 Beiträge seit 2008
vor 4 Jahren

ich bekomme keinerlei Logausgabe und damit auch nichts, was ich debuggen könnte...

Logs bekommst Du mit docker logs <containerid>.
Das funktioniert auch direkt in einer Docker Compose Umgebung.

docker-compose logs ist keine Ausgabe zu erhalten

Ist auch ein Logging Driver aktiv? Wenn nicht bleibt die Ausgabe leer.

c) Docker Desktop Version: 2.1.0.4

Das ist nur die Version von Docker for Desktop. Die Version Deiner Docker Engine bekommst Du über docker info unter "Server Version".
Da kannste auch das andere Zeugs vergleichen, ob Du irgendeinen groben Unterschied siehst.

Wie sieht denn Dein Docker Compose aus? Startet der Container auf der Maschine, wenn Du nicht über Compose startest, sondern direkt?

Auf Dein Docker Hub komm ich nicht drauf; kommt abwechseln "No Access" und "Error 500 - Server Error" 😃
Laut https://status.docker.com/ gibts aber kein Backend-Fehler; keine Ahnung, was da ist..

Taipi88 Themenstarter:in
1.029 Beiträge seit 2010
vor 4 Jahren

Hi,

erst mal danke für die Rückmeldung.

Ja grundsätzlich laufen auf der Ubuntu Maschine noch 20 andere Container - von denen erhalte ich auch immer log-Ausgaben per docker logs und docker-compose logs.

Das Problem ist/war: Bei diesem einen Container kommt dort nichts raus. Er schreibt einfach keinen einzigen Eintrag in's Log (unabhängig von compose oder nicht) - wobei Log zu viel gesagt ist - ist ja einfach nur das stdout.

Getestet habe ich zuerst per compose (das ist zwischenzeitlich wieder gelöscht) - über docker starte ich aktuell folgendermaßen (nach einem pull und jeweils docker rmi zum entfernen gespeicherter images):
docker run -it -p 5000:80 iinvocation/youtubedlui

Zum Problem selbst:
Es lag hier scheinbar ein Caching-Problem vor - anders kann ich mir das persönlich nicht erklären - denn seit heute - lässt der Container sich zumindest wieder starten und hat eine vernünftige Ausgabe. (Ohne Einwirkung meinerseits)

Ich habe persönlich gerade den Eindruck, dass mein Workflow bzw. eher die "Pipeline" bereits die falsche bzw. eher unpassend ist. (Auch weil ein Build via Docker-Hub mal locker bis zu 20 Minuten dauert) Aktuell ist das DockerHub einfach mit GitHub verbunden und löst bei einem Commit auf den master einen Build aus...

Gehe ich richtig in der Vermutung, dass ich mir das Leben einfacher mache, wenn ich den Container anweise sich die Daten von Github per git zu ziehen und auf diese Art beim Start selbst zu bauen? Das würde ja auch gleichzeitig die Wartezeit für das Docker Hub umgehen, da ich dort den Container dann quasi nicht mehr anfassen muss... Bzw. ich bräuchte ja nicht einmal git - curl würde ja vollauf genügen - und das ist bei aspnetcore ja von Nöten.

Oder gibt's generell eine bessere Vorgehensweise?

LG

16.807 Beiträge seit 2008
vor 4 Jahren

Ich habe persönlich gerade den Eindruck, dass mein Workflow bzw. eher die "Pipeline" bereits die falsche bzw. eher unpassend ist. (Auch weil ein Build via Docker-Hub mal locker bis zu 20 Minuten dauert) Aktuell ist das DockerHub einfach mit GitHub verbunden und löst bei einem Commit auf den master einen Build aus...

Wie schaut denn Deine Pipeline aus?
Bei der Bauzeit ist die Maschine und das Caching enorm wichtig: wenn alle Dependencies für das Bauen erst geladen müssen, dauert das ewig - ja.
Wir nutzen daher eigene Agents mit nem Caching. Dann muss wirklich nur der Container gebaut werden und das geht in unter 5 Sekunden.

Übrigens cached Azure DevOps auf seinen Hosted Agents gewisse Container auch - aber eben nur eine handvoll.
Alle anderen müssen bei jedem Bau-Init neu geladen werden, was Zeit kostet.

Gehe ich richtig in der Vermutung, dass ich mir das Leben einfacher mache, wenn ich den Container anweise sich die Daten von Github per git zu ziehen und auf diese Art beim Start selbst zu bauen?

Kann ich Dir nich sagen.
Ich prinzipiell baue gar nicht im Container. Ich baue in Azure DevOps und schiebe den Output in einen /files Ordner.
Warum: ich baue ein einziges mal und kann daraus entweder einen Container machen, oder auch ohne Container releasen.
https://github.com/BenjaminAbt/AzureDevOps-YamlBuildSamples/tree/master/AspNetCore-Docker

Grund ist hier auch, dass das Vorgehen der Build Credentials für private Ressourcen (zB private NuGet Feeds) nicht immer kompatibel ist.
Daher ist man oft gezwungen ausserhalb einen Restore zu triggern, damit die Credentials nicht in der Container Historie auftauchen.

Aber gibt eben mehrere Wege

Taipi88 Themenstarter:in
1.029 Beiträge seit 2010
vor 4 Jahren

Hi,

naja - die lokale Bauzeit beträgt Sekunden (selbst "nackt" ohne caching) - ich lasse aber eben über das DockerHub aktuell bauen - und bis meine Maschine da an die Reihe kommt vergeht eben sehr viel Zeit.

Mein Dockerfile ist deinem Sample gar nicht unähnlich - ich schieb eben nur den Source (ohnehin public) rüber, restore, build - copy der Artefakte und dann weiter wie du.

Nun - ich denke ich werde dann besser meinen Gitlab-Server benutzen und dort selbst bauen.

Danke dir.

16.807 Beiträge seit 2008
vor 4 Jahren

naja - die lokale Bauzeit beträgt Sekunden (selbst "nackt" ohne caching)

Du wirst lokal mit einem "Caching" arbeiten, weil Du die ganzen Images schon gezogen hast. Oder clearst Du alles lokal ständig?
Zudem wirste lokal mehr Power haben als Dein Agent bei DH, was sich vor allem auf das Entpacken der tar.gz Files (also Images) auswirkt.