Comment passer des arguments à entrypoint dans docker-compose.yml


159

J'utilise cette image: dperson / samba

L'image définit son propre point d'entrée et je ne veux pas le remplacer.

J'ai besoin de passer des arguments au point d'entrée, facile avec docker uniquement:

docker run ... dperson/samba arg1 arg2 arg3

Mais comment le faire avec docker_compose.yml?

En ce moment, j'utilise comme solution de contournement:

command: samba.sh arg1 arg2 arg3

Mais ce n'est pas satisfaisant car je force la redéfinition du point d'entrée.

Réponses:


128

La commandclause fonctionne comme @Karthik le dit ci-dessus.

À titre d'exemple simple, le service suivant aura un -inMemoryajout à son ENTRYPOINTquand docker-compose upest exécuté.

version: '2'
services:
  local-dynamo:
    build: local-dynamo
    image: spud/dynamo
    command: -inMemory

52

Tout ce qui est spécifié dans le commandfichier docker-compose.yml doit être ajouté au entrypointfichier défini dans le fichier Dockerfile, à condition qu'il entrypointsoit défini sous forme exécutable dans le fichier Dockerfile.

Si le EntryPoint est défini sous forme de shell, tous les arguments CMD seront ignorés.


20
Que diriez-vous de quelques exemples. Qu'est-ce que la "forme exécutive"?
Aaron McMillin

13
ENTRYPOINT ["executable", "param1", "param2"](formulaire exec, préféré) ENTRYPOINT command param1 param2(formulaire shell) Référence: référence
Dockerfile

16
Un exemple aiderait tellement cette réponse.
Dagrooms

32

Vous pouvez utiliser docker-compose runau lieu de docker-compose upet clouer les arguments à la fin. Par exemple:

docker-compose run dperson/samba arg1 arg2 arg3

Si vous devez vous connecter à d'autres conteneurs Docker, utilisez l' --service-portsoption peut utiliser :

docker-compose run --service-ports dperson/samba arg1 arg2 arg3

1
malheureusement en essaim, ce n'est pas une option
holms

15

Pour remplacer le point d'entrée par défaut, utilisez l' entrypointoption . Pour transmettre les arguments, utilisez command.

Voici l'exemple de remplacement bashpar shdans l' ubuntuimage:

version: '3'
services:
  sh:
    entrypoint: /bin/sh
    command: -c "ps $$(echo $$$$)"
    image: ubuntu
    tty: true
  bash:
    entrypoint: /bin/bash
    command: -c "ps $$(echo $$$$)"
    image: ubuntu
    tty: true

Voici la sortie:

$ docker-compose up   
Starting test_sh_1                ... done
Starting 020211508a29_test_bash_1 ... done
Attaching to test_sh_1, 020211508a29_test_bash_1
sh_1    |   PID TTY      STAT   TIME COMMAND
sh_1    |     1 pts/0    Ss+    0:00 /bin/sh -c ps $(echo $$)
020211508a29_test_bash_1 |   PID TTY      STAT   TIME COMMAND
020211508a29_test_bash_1 |     1 pts/0    Rs+    0:00 ps 1

13

J'étais confronté au même problème avec l'esclave ssh jenkins ' jenkinsci / ssh-slave '. Cependant, mon cas était un peu compliqué car il fallait passer un argument contenant des espaces. J'ai réussi à le faire comme ci-dessous (le point d'entrée dans dockerfile est sous forme exécutable):

command: ["some argument with space which should be treated as one"]
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.