2016-05-21 12 views
41

Używam tego obrazu: dperson/sambaJak przekazywać argumenty do punkt_wejścia w Docker-compose.yml

Obraz jest definiujące własną punkt_wejścia i nie chcę, aby go zastąpić.

muszę przekazywać argumenty do punkt_wejścia, łatwe tylko dokowanym:

docker run ... dperson/samba arg1 arg2 arg3 

ale jak to zrobić z docker_compose.yml?

Teraz używam jako obejście:

command: samba.sh arg1 arg2 arg3 

Ale to nie jest satysfakcjonujące, jak wymusić na redefinicję punkt_wejścia.

Odpowiedz

18

Cokolwiek jest określona w command w Docker-compose.yml powinien dostać dołączane do entrypoint określonym w Dockerfile, pod warunkiem entrypoint jest zdefiniowana w formie exec w Dockerfile.

Jeśli EntryPoint jest zdefiniowany w formie powłoki, wówczas wszelkie argumenty CMD będą ignorowane.

+4

Co powiesz na kilka przykładów. Czym jest "forma exec"? –

+3

'ENTRYPOINT [" plik wykonywalny "," param1 "," param2 "]' (formularz exec, preferowany) 'polecenie ENTRYPOINT param1 param2' (powłoka) Odniesienie: [odnośnik pliku Docker] (https: //docs.docker .com/engine/reference/builder/# entrypoint) – jonasbn

+2

Przykład bardzo pomógłby tej odpowiedzi. – Dagrooms

7

Możesz użyć docker-compose run zamiast docker-compose up i dodać do argumentów na końcu. Na przykład:

docker-compose run dperson/samba arg1 arg2 arg3 

Jeśli musisz podłączyć do innych pojemników Döcker, zastosowanie mogą korzystać --service-ports opcję:

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

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

Jako prosty przykład, poniższa usługa będzie miała -inMemory dodany do jej ENTRYPOINT po uruchomieniu docker-compose up.

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

byłem w obliczu tego samego problemu z Jenkins ssh „niewolnika” jenkinsci/ssh-slave jednak moim przypadku było nieco skomplikowane, ponieważ konieczne było przekazać argument, który zawierał spacji. Udało mi się to zrobić jak poniżej (punkt wejścia w dockerfile jest w postaci exec):

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

Mam nadzieję, że to pomoże. Dzięki.