Come passare argomenti a entrypoint in docker-compose.yml


159

Uso questa immagine: dperson / samba

L'immagine sta definendo il proprio punto di accesso e non voglio ignorarlo.

Devo passare argomenti al punto di accesso, facile solo con la finestra mobile:

docker run ... dperson/samba arg1 arg2 arg3

Ma come farlo con docker_compose.yml?

In questo momento uso come soluzione alternativa:

command: samba.sh arg1 arg2 arg3

Ma non è soddisfacente mentre forzo la ridefinizione del punto di accesso.

Risposte:


128

La commandclausola funziona come sopra indicato da @Karthik.

Come semplice esempio, il seguente servizio avrà un -inMemoryaggiunta al suo ENTRYPOINTquando docker-compose upviene eseguito.

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

52

Qualunque cosa sia specificata in commandin docker-compose.yml dovrebbe essere aggiunta a quella entrypointdefinita nel Dockerfile, a condizione che entrypointsia definita in forma exec nel Dockerfile.

Se il EntryPoint è definito in forma shell, tutti gli argomenti CMD verranno ignorati.


20
Che ne dici di alcuni esempi. Che cos'è "exec form"?
Aaron McMillin il

13
ENTRYPOINT ["executable", "param1", "param2"](modulo exec, preferito) ENTRYPOINT command param1 param2(modulo shell) Riferimento: riferimento
Dockerfile

16
Un esempio aiuterebbe molto questa risposta.
Dagrooms,

32

È possibile utilizzare docker-compose runinvece docker-compose upe virare gli argomenti alla fine. Per esempio:

docker-compose run dperson/samba arg1 arg2 arg3

Se è necessario connettersi ad altri contenitori docker, utilizzare può utilizzare l' --service-portsopzione:

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

1
purtroppo in sciame questa non è un'opzione
holms

15

Per sovrascrivere il punto di accesso predefinito, utilizzare l' entrypointopzione . Per passare gli argomenti utilizzare command.

Ecco l'esempio di sostituzione bashcon shin 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

Ecco l'output:

$ 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

Stavo affrontando lo stesso problema con jenkins ssh slave ' jenkinsci / ssh-slave '. Tuttavia, il mio caso è stato un po 'complicato perché era necessario passare un argomento che contenesse spazi. Sono riuscito a farlo come di seguito (entrypoint in dockerfile è in formato exec):

command: ["some argument with space which should be treated as one"]
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.