J'ai un script shell entrypoint qui accepte les arguments - a -b.
J'ai un fichier de travail docker-compose.yml où je remplace le point d'entrée de Tomcat par l'instruction suivante:
entrypoint: /usr/local/Tomcat/entrypoint.sh -a param1 -b param2
Qu'est-ce que docker run alternative?
docker run --entrypoint "/usr/local/Tomcat/entrypoint.sh -a param1 -b param2" Tomcat:jre8
ne marche pas
Je reçois:
docker: Error response from daemon:
invalid header field value "oci runtime error: container_linux.go:247:
starting container process caused \"exec:
\\\"/usr/local/Tomcat/entrypoint.sh -a param1 -b param2\\\":
stat /usr/local/Tomcat/entrypoint.sh -a param1 -b param2:
no such file or directory\"\n".
FYI:
docker run --entrypoint "/usr/local/Tomcat/entrypoint.sh" Tomcat:jre8
fonctionne du point de vue de Docker, mais le script échoue évidemment
C'est à cause des citations que vous utilisez autour de votre commande.
Quand vous courez docker run --entrypoint "/usr/local/Tomcat/entrypoint.sh -a param1 -b param2" Tomcat:jre8
Docker traite ce qui se trouve dans ces citations comme un fichier de script unique.
Comme vous pouvez le voir de l'erreur:
stat /usr/local/Tomcat/entrypoint.sh -a param1 -b param2:
no such file or directory\"\n".
Il essaie d'exécuter stat
sur le fichier avant de l'exécuter, afin de savoir s'il existe.
Placez les arguments à votre point d’entrée à la fin de votre commande docker comme suit:
docker run --entrypoint <entrypoint.sh> <image:tag> <arg1> <arg2> <arg3>
Votre commande devient:
docker run --entrypoint /usr/local/Tomcat/entrypoint.sh Tomcat:jre8 -a param1 -b param2
Regardez les extraits de code dans la documentation officielle:
L'ENTRÉE D'UNE image est semblable à une COMMANDE car elle spécifie le fichier exécutable à exécuter au démarrage du conteneur.
https://docs.docker.com/engine/reference/run/#/entrypoint-default-command-to-execute-at-runtime
Je pense que cela mérite également d'être noté:
docker run
commande, votre --entrypoint
devrait venir en premier.Je ne sais pas lequel de mes arguments était le problème, mais en mettant --entrypoint "/bin/bash"
à la fin n’a pas empêché l’exécution de ENTRYPOINT à partir du fichier Docker. Mes arguments incluaient: