Je crée une image à partir d'une autre image qui définit un point d'entrée spécifique. Cependant, je veux que mon image en ait une par défaut. Comment réinitialiser ENTRYPOINT?
J'ai essayé le Dockerfile suivant:
FROM some-image
ENTRYPOINT ["/bin/sh", "-c"]
Malheureusement, cela ne fonctionne pas comme le point d’entrée par défaut car il faut que la commande soit citée.
docker run myimage ls -l / # "-l /" arguments are ignored
file1 file2 file3 # files in current working directory
docker run myimage "ls -l /" # works correctly
Comment utiliser des commandes sans citer?
Pour désactiver une ENTRYPOINT
existante, définissez un tableau vide dans votre fichier docker
ENTRYPOINT []
Ensuite, vos arguments à docker run
seront exécutés normalement.
La raison pour laquelle votre ENTRYPOINT ["/bin/sh", "-c"]
requiert des guillemets est que, sans les guillemets, les arguments de ls
sont passés à sh
.
Unquoted entraîne l'envoi de nombreux arguments à sh
"/bin/sh", "-c", "ls", "-l", "/"
La citation permet de transmettre la commande complète (sh -c
) à sh
sous la forme d'un argument.
"/bin/sh", "-c", "ls -l /"
Ce n'est pas vraiment lié au docker. Essayez de lancer ce qui suit:
/bin/sh -c echo foo
/bin/sh -c "echo foo"
Le -c
signifie que /bin/sh
ne prend qu'un seul argument. Donc, supprimer le -c
du point d’entrée que vous définissez devrait le réparer. Ceci est plus flexible que la réinitialisation du point d’entrée; par exemple. vous pouvez le faire pour utiliser les collections de logiciels:
ENTRYPOINT ["scl", "enable", "devtoolset-4", "--", "bash"]