Cómo pasar argumentos al punto de entrada en docker-compose.yml

158

Yo uso esta imagen: dperson / samba

La imagen está definiendo su propio punto de entrada y no quiero anularlo.

Necesito pasar argumentos al punto de entrada, fácil solo con docker:

docker run ... dperson/samba arg1 arg2 arg3

Pero, ¿cómo hacerlo con docker_compose.yml?

En este momento lo uso como solución alternativa:

command: samba.sh arg1 arg2 arg3

Pero no es satisfactorio ya que forzo la redefinición del punto de entrada.

usuario1707414
fuente

Respuestas:

127

La commandcláusula funciona como dice @Karthik arriba.

Como un simple ejemplo, el siguiente servicio se -inMemoryagregará ENTRYPOINTcuando docker-compose upse ejecute.

version: '2'
services:
  local-dynamo:
    build: local-dynamo
    image: spud/dynamo
    command: -inMemory
Randy Larson
fuente
52

Lo que se especifica en commanddocker-compose.yml debe agregarse a lo entrypointdefinido en el Dockerfile, siempre que entrypointesté definido en forma ejecutiva en el Dockerfile.

Si EntryPoint se define en forma de shell, se ignorarán los argumentos de CMD.

Karthik
fuente
20
¿Qué tal algunos ejemplos? ¿Qué es la "forma ejecutiva"?
Aaron McMillin el
13
ENTRYPOINT ["executable", "param1", "param2"](formulario ejecutivo, preferido) ENTRYPOINT command param1 param2(formulario de shell) Referencia: referencia de
Dockerfile
16
Un ejemplo ayudaría mucho a esta respuesta.
Dagrooms
32

Puede usar en docker-compose runlugar de docker-compose upy agregar los argumentos al final. Por ejemplo:

docker-compose run dperson/samba arg1 arg2 arg3

Si necesita conectarse a otros contenedores acoplables, use la --service-portsopción use :

docker-compose run --service-ports dperson/samba arg1 arg2 arg3
afaulconbridge
fuente
1
tristemente en enjambre esto no es una opción
holms
15

Para anular el punto de entrada predeterminado, use la entrypointopción . Para pasar los argumentos use command.

Aquí está el ejemplo de la sustitución bashcon shen ubuntula imagen:

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

Aquí está la salida:

$ 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
fuente
13

Estaba enfrentando el mismo problema con jenkins ssh slave ' jenkinsci / ssh-slave '. Sin embargo, mi caso fue un poco complicado porque era necesario pasar un argumento que contenía espacios. Me las arreglé para hacerlo como a continuación (el punto de entrada en dockerfile está en forma ejecutiva):

command: ["some argument with space which should be treated as one"]
Alina Grosu
fuente