2017-09-08 6 views
0

Docker Noob hier ...den Unterschied in der Folge von ENTRYPOINT/CMD zwischen Dockerfile und Docker Laufe zu verstehen

Ich versuche, einen IBM Datapower-Behälter aus einem Dockerfile zu bauen und laufen, aber es scheint nicht, so zu arbeiten, als würde man einfach docker run ausführen und die gleichen Parameter im Terminal übergeben.

Dies funktioniert (docker run)

docker run -it \ 
    -v $PWD/config:/drouter/config \ 
    -e DATAPOWER_ACCEPT_LICENSE=true \ 
    -e DATAPOWER_INTERACTIVE=true \ 
    -e DATAPOWER_WORKER_THREADS=4 \ 
    -p 9090:9090 \ 
    --name mydatapower \ 
    ibmcom/datapower 

... der Schlüssel Teil ist, dass es die ./config Ordner besteigt und die benutzerdefinierte Konfiguration von Datapower läuft in dem Behälter aufgenommen.

Dies gilt nicht (Dockerfile)

Dockerfile:

FROM ibmcom/datapower 

ENV DATAPOWER_ACCEPT_LICENSE=true 
ENV DATAPOWER_INTERACTIVE=true 
ENV DATAPOWER_WORKER_THREADS=4 

EXPOSE 9090 

COPY config/auto-startup.cfg /drouter/config/auto-startup.cfg 

Körperbau:

docker build -t local/datapower . 

Run:

docker run -it \ 
    -p 9090:9090 \ 
    --name mydatapower local/datapower 

Das Problem ist, dass DataPower die Datei auto-startup.cfg nicht abruft, sodass die zusätzlichen Konfigurationsoptionen nicht verwendet werden. Ich weiß, dass der Pfad der Quelldatei korrekt ist, denn wenn ich den Dateinamen falsch schreibe, wirft Docker einen Fehler auf.

Ich habe eine Theorie, dass es möglicherweise den geerbten ENTRYPOINT oder CMD ausführt, bevor die Konfigurationsdatei verfügbar ist. Ich weiß nicht, wie ich das testen oder beweisen soll. Ich weiß nicht, was der ENTRYPOINT oder CMD ist, weil das geerbte Image nicht Open Source ist und ich nicht herausfinden kann, wie ich es finde.

Scheint das wahrscheinlich?

UPDATE:

Der Inhalt des auto-startup.cfg ist:

top; co 

ssh 

web-mgmt 
    admin enabled 
    port 9090 
exit 

Es ist einfach das Data WebGUI ermöglicht.

Der Ausgang, wenn sie mit ihm in der Kommandozeile ausgeführt wird:

docker run -it -v $PWD/config:/drouter/config -v $PWD/local:/drouter/local -e DATAPOWER_ACCEPT_LICENSE=true -e DATAPOWER_INTERACTIVE=true -e DATAPOWER_WORKER_THREADS=4 -p 9091:9090 --name myconfigureddatapower ibmcom/datapower` 

... enthält diese:

20170908T121729.015Z [0x8100006e][system][notice] : Executing startup configuration. 
20170908T121729.970Z [0x00350014][mgmt][notice] web-mgmt(WebGUI-Settings): tid(303): Operational state up 

... aber mit Dockerfile tut es nicht. Deshalb denke ich, dass die Konfigurationsdateien möglicherweise zu spät kopiert werden.

Ich habe versucht, CMD ["/bin/drouter"] am Ende meiner Dockerfile ohne Erfolg hinzuzufügen.

+0

Sie können mit 'Docker Bild inspizieren' 'die ENTRYPOINT' zu finden und' CMD' für ein vorhandenes Bild . – larsks

+0

Dank @larsks :) – hofnarwillie

Antwort

1

Ich habe Ihre Dockerfile getestet und es scheint zu funktionieren. Meine auto-startup.cfg Datei wird an der richtigen Stelle kopiert und wenn ich den Container starte, liest es die Datei.

ich diese Ausgabe:

[[email protected] tmp]# docker run -ti -p 9090:9090 test 
20170908T123728.818Z [0x8040006b][system][notice] logging target(default-log): Logging started. 
20170908T123729.067Z [0x804000fe][system][notice] : Container instance UUID: 36bcca0e-6139-4694-91b0-2b7b66c3a498, Cores: 4, vCPUs: 4, CPU model: Intel(R) Xeon(R) CPU E5-2676 v3 @ 2.40GHz, Memory: 16049.1MB, Platform: docker, OS: dpos, Edition: developers-limited, Up time: 0 minutes 
20170908T123729.071Z [0x8040001c][system][notice] : DataPower IDG is on-line. 
20170908T123729.071Z [0x8100006f][system][notice] : Executing default startup configuration. 
20170908T123729.416Z [0x8100006d][system][notice] : Executing system configuration. 
20170908T123729.417Z [0x8100006b][mgmt][notice] domain(default): tid(8143): Domain operational state is up. 
708f98be1390 
Unauthorized access prohibited. 
20170908T123731.239Z [0x806000dd][system][notice] cert-monitor(Certificate Monitor): tid(399): Enabling Certificate Monitor to scan once every 1 days for soon to expire certificates 
20170908T123731.552Z [0x8100006e][system][notice] : Executing startup configuration. 
20170908T123732.436Z [0x8100003b][mgmt][notice] domain(default): Domain configured successfully. 
20170908T123732.449Z [0x00350014][mgmt][notice] web-mgmt(WebGUI-Settings): tid(303): Operational state up 
login: 

Um zu überprüfen, dass Ihre Datei in den Container kopiert wurde Sie docker run -ti local/datapower sh laufen kann, den Behälter zu geben und überprüfen Sie den Inhalt der /drouter/config/.

Ihr Basisbildbefehl lautet: CMD ["/bin/drouter"] Sie können überprüfen, ob docker history ibmcom/datapower läuft.

UPDATE:

Der drouter Benutzer in dem Behälter in der Lage sein, um die auto-startup.cfg Datei zu lesen. Sie haben 2 Möglichkeiten:

  • stellen Sie Ihren lokalen auto-startup.cfg mit den entsprechenden Berechtigungen (chmod 644 config/autostart.cfg).
  • oder diese Zeile in der Dockerfile hinzufügen, so drouter die Datei lesen kann:

    USER root 
    RUN chown drouter /drouter/config/auto-startup.cfg 
    USER drouter 
    
+0

Vielen Dank! Das ist schon sehr hilfreich, aber es funktioniert immer noch nicht. Bitte beachten Sie die Updates zu OP für die Protokollausgabe. – hofnarwillie

+0

@hofnarwillie Ich habe die Antwort mit den Logs aktualisiert, die ich beim Ausführen des Images erhalte. –

+0

Das ist komisch. Ich bekomme nicht die 'web-mgmt (WebGUI-Einstellungen): tid (303): Operational state up '. Wenn ich die Shell innerhalb des Containers starte, bekomme ich: '$ cat drouter/config/auto-startup.cfg'> ' cat: kann 'drouster/config/auto-startup.cfg' nicht öffnen: Berechtigung verweigert ' – hofnarwillie

Verwandte Themen