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.

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

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.


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

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

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"]
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.