Dieses durchaus möglich. Das Problem ist, dass Sie versuchen, den Befehl direkt auszuführen. Stattdessen müssen Sie eine entrypoint.sh
erstellen und ausführen lassen. Dieses Skript kann basierend auf Umgebungsvariablen festlegen, was zu tun ist.
Betrachten Sie die unten Dockerfile
FROM centos:7.2.1511
COPY entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
CMD ["this","is", "tarun"]
und den Inhalt des entrypoint.sh
sind wie unten
#!/usr/bin/env sh
_load() {
CMD=""
if [ ! -z "$ENTRYPOINT" ]; then
CMD=$ENTRYPOINT
fi
if [ "$#" -gt 0 ]; then
CMD="$CMD [email protected]"
elif [ ! -z $COMMAND ]; then
CMD="$CMD $COMMAND"
fi
echo "Executing - $CMD"
exec $CMD
}
_load [email protected]
Das Skript nichts tut, aber überprüfen, ob eine Umgebungsvariable $ENTRYPOINT
oder $COMMAND
übergeben wurde, oder beide waren vergangen oder Befehl von docker run wurde übergeben. Basierend auf folgenden Prioritätsreihenfolge läuft er den Befehl
- ENTRYPOINT + RUN PARAMETER - beide Kombinieren und
- ENTRYPOINT + Befehl ausführen - beide kombinieren und führen
- FEHLT $ COMMAND - Run $ ENTRYPOINT
- FEHLT $ ENTRYPOINT - Run $ COMMAND
Jetzt testen es
$ docker run -e ENTRYPOINT=/bin/echo test my name "is XYZ"
Executing - /bin/echo my name is XYZ
my name is XYZ
Das Skript kann nicht zu 100% perfekt sein, aber ich gerade erstellt die Idee
zeigen Wenn Sie ein einfaches entrypoint.sh
benötigen, dann können Sie es sogar ersetzen unterhalb dem Inhalt
exec $ENTRYPOINT [email protected]
Dies würde auch Arbeit.
Mögliche Duplikat von [Können wir ENV-Variablen über die Befehlszeile übergeben, während ein Docker-Image über Dockerfile erstellt wird?] (https://stackoverflow.com/questions/31198835/can-we-pass-env-variables-through-cmd-line-while -Bui lding-a-docker-image-through) – MatTheWhale