Jak przekazać argumenty do punktu wejścia w docker-compose.yml

159

Używam tego obrazu: dperson / samba

Obraz definiuje swój własny punkt wejścia i nie chcę go przesłonić.

Muszę przekazać argumenty do punktu wejścia, łatwe tylko z dockerem:

docker run ... dperson/samba arg1 arg2 arg3

Ale jak to zrobić z docker_compose.yml?

W tej chwili używam jako obejścia:

command: samba.sh arg1 arg2 arg3

Ale to nie jest satysfakcjonujące, ponieważ wymuszam redefinicję punktu wejścia.

user1707414
źródło

Odpowiedzi:

128

commandKlauzula działa jako @Karthik mówi powyżej.

Jako prosty przykład, następująca usługa zostanie -inMemorydodana do ENTRYPOINTkiedy docker-compose upzostanie uruchomiona.

version: '2'
services:
  local-dynamo:
    build: local-dynamo
    image: spud/dynamo
    command: -inMemory
Randy Larson
źródło
52

Cokolwiek jest określone w commandpliku docker-compose.yml, powinno zostać dołączone do entrypointzdefiniowanego w pliku Dockerfile, pod warunkiem, że entrypointjest zdefiniowane w formie exec w pliku Dockerfile.

Jeśli EntryPoint jest zdefiniowany w postaci powłoki, wszelkie argumenty CMD zostaną zignorowane.

Karthik
źródło
20
Może kilka przykładów. Co to jest „formularz wykonawczy”?
Aaron McMillin
13
ENTRYPOINT ["executable", "param1", "param2"](preferowany formularz exec) ENTRYPOINT command param1 param2(formularz powłoki) Odniesienie: Odniesienie do pliku Docker
jonasbn
16
Przykład bardzo pomógłby w tej odpowiedzi.
Dagrooms
32

Możesz użyć docker-compose runzamiast docker-compose upi przypisać argumenty na końcu. Na przykład:

docker-compose run dperson/samba arg1 arg2 arg3

Jeśli potrzebujesz połączyć się z innymi kontenerami docker, użyj --service-portsopcji:

docker-compose run --service-ports dperson/samba arg1 arg2 arg3
afaulconbridge
źródło
1
niestety w roju to nie jest opcja
holms
15

Aby zastąpić domyślny punkt wejścia, użyj entrypointopcji . Aby przekazać argumenty, użyjcommand .

Oto przykład zastępując bashze shw ubuntuobrazie:

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

Oto wynik:

$ 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
źródło
13

Miałem ten sam problem z jenkins ssh slave „ jenkinsci / ssh-slave ”. Jednak mój przypadek był nieco skomplikowany, ponieważ konieczne było przekazanie argumentu zawierającego spacje. Udało mi się to zrobić jak poniżej (punkt wejścia w pliku dockerfile jest w postaci exec):

command: ["some argument with space which should be treated as one"]
Alina Grosu
źródło