web-dev-qa-db-fra.com

Point d'entrée par défaut de Docker

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?

11
Eugene Dounar

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 /"
26
Matt

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"]

0
Mohan