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.

user1707414
la source

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
Randy Larson
la source
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.

Karthik
la source
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
afaulconbridge
la source
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
Kenorb
la source
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"]
Alina Grosu
la source