2016-06-10 14 views
5

Ich versuche Nightmare.js auf dem Server auszuführen. Ich bin mir bewusst, dass es unter Linux kopflos ist und xvfb erfordert. Was ich nicht verstehe ist, warum ich weiterhin den folgenden Fehler, wenn im Debug-Modus erhalten:Nightmare.js mit Docker

nightmare queuing process start +0ms 
    nightmare queueing action "useragent" +3ms 
    nightmare queueing action "goto" for https://news.ycombinator.com +2ms 
    nightmare queueing action "cookies" +1ms 
    nightmare queueing action "goto" for https://news.ycombinator.com/login +0ms 
    nightmare queueing action "type" +1ms 
    nightmare queueing action "type" +0ms 
    nightmare queueing action "click" +0ms 
    nightmare queueing action "wait" +1ms 
    nightmare queueing action "goto" for https://news.ycombinator.com/item?id=11878025 +0ms 
    nightmare queueing action "click" +0ms 
    nightmare queueing action "wait" +1ms 
    nightmare running +0ms 
    nightmare electron child process exited with code 2: undefined +25ms 

Hier ist mein Dockerfile:

FROM node:latest 

RUN apt-get update &&\ 
    apt-get install -y \ 
    xvfb \ 
    x11-xkb-utils \ 
    xfonts-100dpi \ 
    xfonts-75dpi \ 
    xfonts-scalable \ 
    xfonts-cyrillic \ 
    x11-apps \ 
    clang \ 
    libdbus-1-dev \ 
    libgtk2.0-dev \ 
    libnotify-dev \ 
    libgnome-keyring-dev \ 
    libgconf2-dev \ 
    libasound2-dev \ 
    libcap-dev \ 
    libcups2-dev \ 
    libxtst-dev \ 
    libxss1 \ 
    libnss3-dev \ 
    gcc-multilib \ 
    g++-multilib 

RUN mkdir -p /usr/src/app 
WORKDIR /usr/src/app 

COPY . /usr/src/app 

RUN npm install 

CMD DEBUG=nightmare* xvfb-run --server-args="-screen 0 1024x768x24" node tux.js -s hn -m create -p 11878025 

Irgendwelche Gedanken? Hilfe würde sehr geschätzt werden.

+0

Welche Version von Nightmare verwenden Sie? – Ross

+0

Können Sie es mit DEBUG ausführen = Alptraum: *, Elektron: * und sehen, ob Sie einige nützliche Protokollnachrichten erhalten? – khattam

+0

Wenn ich die neueste Version von nightmare.js (2.5.1) ausführe, erhalte ich die folgende Ausgabe in meinem Beitrag oben. –

Antwort

2

Was Sie tun können, ist es, alle Dateien in einem Unterverzeichnis zu setzen, sagen app/und in Ihrem Dockerfile tun:

ADD app/ /usr/src/app/ 

natürlich in der App-Ordner dort env.sh sein wird, package.json, tux.js und das Verzeichnis lib

Wenn Sie also weitere Dateien hinzufügen müssen, müssen Sie sie nicht manuell in Ihrer Dockerdatei hinzufügen.

PS: Es funktioniert auch mit COPY

0

Der Fehler undefined ist ein Hinweis darauf, dass ein Paket fehlt. Wenn ein Paket nicht installiert ist, wie kann es dann definiert werden? Das würde bedeuten, dass du den Container nicht richtig gebaut hast und ich denke, ich sehe den Schuldigen.

RUN mkdir -p /usr/src/app 
WORKDIR /usr/src/app 

*COPY . /usr/src/app* 

RUN npm install 

Nach to the dockerfile documentation, die COPY Befehl kopiert Dateien, keine Verzeichnisse, die Sie mit COPY . /usr/src/app angegeben. Versuchen Sie stattdessen, . durch * zu ersetzen, da dies ALLE Dateien im aktuellen Verzeichnis angibt, für die Sie die docker build initiieren möchten.

+0

kein Glück. Mit COPY */usr/src/app wurde jede Datei (nicht das Verzeichnis) in mein Verzeichnis/user/src/app kopiert. Schließen (denke ich), aber kein Glück. –

+0

Konnten Sie Ihre App ohne einen Container arbeiten lassen? Sie sind also erfolgreich auf Ihrem lokalen Computer aufgebaut? Es ist keine gute Idee zu versuchen, unvollständige Anwendungen in Docker-Container zu bekommen, da dies nur eine ganz neue Ebene der Verwirrung hinzufügen kann. Ich bezweifle, dass Ihre App unvollständig ist, aber es tut nicht weh zu wissen. – Jouster500

+0

Funktioniert großartig vor Ort. Keine Probleme dort. Es wird die Konfiguration der Headless-Umgebung bekommen und richtig laufen - ich vermute, dass ich eine Abhängigkeit von Arten vermisse .... einfach nicht sicher, was genau wie die Ausgabe nicht ausführlich genug ist. –

1

Okay, also habe ich herausgefunden, was das Problem war. Anscheinend mochte es die Kopiersyntax in meiner Dockerfile nicht. Ich endete mit ADD und es hat funktioniert.

ADD /lib /usr/src/app/lib 
ADD env.sh /usr/src/app 
ADD package.json /usr/src/app 
ADD tux.js /usr/src/app 
+2

Sie können die Anzahl der erstellten Layer begrenzen, indem Sie nur eine ADD-Anweisung verwenden: 'ADD env.sh package.json tux.js/usr/src/app' –