Docker – Überschreiben oder entfernen ENTRYPOINT von einem Basis-image

Ich bin mit Docker (version 1.12.2, bauen bb80604), um das setup eine einfache Bild – /container mit Gatling (Lasttest-tool) + NodeJS. So, ich zog dieses Andockfenster/Gatling-base-Bild und schuf mein eigenes Dockerfile zu installieren NodeJS drauf.

Jedoch die Andockfenster/Gatling-base-Bild oben hat einen ENTRYPOINT bereits definiert zu nennen Gatling Anhieb und dann automatisch beendet den container. Es sieht wie folgt aus:

ENTRYPOINT ["gatling.sh"]

Was ich erreichen will ist: ich möchte ausführen eines zweiten Befehls (meine eigene NodeJS script zum analysieren der Testergebnisse), jedoch konnte ich keine Lösung finden, bisher (ich habe versucht, das überschreiben der ENTRYPOINT verschiedene Kombinationen der ENTRYPOINT und CMD, aber ohne Erfolg).

Hier ist, wie meine aktuelle Dockerfile aussieht:

FROM denvazh/gatling:2.2.3

RUN apk update \
&& apk add -U bash \
&& apk add nodejs=6.7.0-r0

COPY simulations /opt/gatling/user-files/simulations
COPY trigger-test-and-parser.sh /opt/gatling/

RUN chmod +x /opt/gatling/trigger-test-and-parser.sh

ENTRYPOINT ["bash", "/opt/gatling/trigger-test-and-parser.sh"]

Hier ist der Befehl, den ich verwende, um zu bauen mein Bild basiert auf meiner Dockerfile:

docker build --no-cache -t gatling-nodejs:v8 .

– Und dies ist der Befehl, den ich verwende, um mein container:

docker run -i -v "$PWD/results":/opt/gatling/results -v "$PWD":/opt/gatling/git.campmon.com/rodrigot/platform-hps-perf-test gatling-nodejs:v8

– Und dies ist die shellscript – (trigger-test-and-parser.sh), würde ich gerne ausführen, wenn der container gestartet wird (es auslösen sollte, Gatling und dann läuft mein NodeJS-parser):

gatling.sh -s MicroserviceHPSPubSubRatePerfTest.scala
node publish-rate-to-team-city.js

Irgendwelche Ideen oder zwickt, so kann ich beide Befehle einmal mein container startet?

Vielen Dank!

  • Ihre docker run endet mit gatling-nodejs:v7 ist es ein Tippfehler? Ich dachte, es würde am Ende mit 8 statt of7.
  • Es ist ein Tippfehler, sorry. Gerade aktualisiert! 🙂
  • versuchen Sie in Ihrem gatlin.sh cmd1 ; cmd2 ; sleep infinity
InformationsquelleAutor user2253130 | 2016-12-18



2 Replies
  1. 12

    Set ENTRYPOINT zu /usr/bin/env. Legen Sie dann CMD zu sein, was Sie ausführen möchten.

    • Super!!! Es funktionierte gut für mich! Ich danke Ihnen sehr!
    • Dies funktioniert gut, aber keine Erklärung warum? Ich war überrascht, überschreiben ENTRYPOINT ist nicht eine einfache, unkomplizierte Angelegenheit.
    • Es gibt keine Möglichkeit zum löschen einer ENTRYPOINT Einstellung in einem Basis-image, so dass die einzige option ist, um es zu ersetzen mit etwas anderem. Die /usr/bin/env Programm wird bequem in dieser Hinsicht, wie es ausführen-Befehl geben Sie als argument. Siehe die man-Seite für env für mehr details über es zu tun.
  2. 4

    Grahams Idee oben funktionierte ziemlich gut. Nochmals vielen Dank!

    Für die Zukunft, hier ist die zwei Zeilen hatte ich meine Dockerfile:

    ENTRYPOINT ["/usr/bin/env"]
    
    CMD ["bash", "/opt/gatling/trigger-test-and-parse-result.sh"]

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.