Como passar argumentos para o ponto de entrada no docker-compose.yml

158

Eu uso esta imagem: dperson / samba

A imagem está definindo seu próprio ponto de entrada e não quero substituí-lo.

Preciso passar argumentos para o ponto de entrada, fácil apenas com o docker:

docker run ... dperson/samba arg1 arg2 arg3

Mas como fazer isso com o docker_compose.yml?

No momento, eu uso como solução alternativa:

command: samba.sh arg1 arg2 arg3

Mas não é satisfatório, pois forço a redefinição do ponto de entrada.

user1707414
fonte

Respostas:

127

A commandcláusula funciona como o @Karthik diz acima.

Como um exemplo simples, o serviço a seguir terá um -inMemoryacréscimo ao ENTRYPOINTquando docker-compose upé executado.

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

Tudo o que é especificado no arquivo commanddocker-compose.yml deve ser anexado ao entrypointdefinido no Dockerfile, desde que entrypointdefinido no formato exec no Dockerfile.

Se o EntryPoint for definido em forma de shell, todos os argumentos do CMD serão ignorados.

Karthik
fonte
20
Que tal alguns exemplos. O que é "forma executiva"?
Aaron McMillin
13
ENTRYPOINT ["executable", "param1", "param2"](formulário exec, preferencial) ENTRYPOINT command param1 param2(formulário do shell) Referência: referência do
Dockerfile
16
Um exemplo ajudaria muito essa resposta.
Dagrooms
32

Você pode usar em docker-compose runvez de docker-compose upe aderir aos argumentos no final. Por exemplo:

docker-compose run dperson/samba arg1 arg2 arg3

Se você precisar se conectar a outros contêineres do docker, use can use --service-portsoption:

docker-compose run --service-ports dperson/samba arg1 arg2 arg3
afaulconbridge
fonte
1
infelizmente no enxame esta não é uma opção
holms
15

Para substituir o ponto de entrada padrão, use entrypointopção . Para passar os argumentos, use command.

Aqui está o exemplo de substituição bashpor shna ubuntuimagem:

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

Aqui está a saída:

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

Eu estava enfrentando o mesmo problema com o jenkins ssh slave ' jenkinsci / ssh-slave '. No entanto, meu caso foi um pouco complicado porque era necessário passar um argumento que continha espaços. Eu consegui fazê-lo como abaixo (o ponto de entrada no dockerfile está no formato exec):

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