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.
Sie können mit 'Docker Bild inspizieren' 'die ENTRYPOINT' zu finden und' CMD' für ein vorhandenes Bild . –
larsks
Dank @larsks :) – hofnarwillie