Übergeben von Argumenten an den Einstiegspunkt in docker-compose.yml


158

Ich benutze dieses Bild: dperson / samba

Das Bild definiert seinen eigenen Einstiegspunkt und ich möchte ihn nicht überschreiben.

Ich muss Argumente an den Einstiegspunkt übergeben, einfach nur mit Docker:

docker run ... dperson/samba arg1 arg2 arg3

Aber wie geht das mit docker_compose.yml?

Im Moment verwende ich als Workaround:

command: samba.sh arg1 arg2 arg3

Aber es ist nicht zufriedenstellend, da ich die Neudefinition des Einstiegspunkts erzwinge.

Antworten:


127

Die commandKlausel funktioniert wie oben von @Karthik angegeben.

Als einfaches Beispiel wird dem folgenden Dienst ein -inMemoryZusatz hinzugefügt, ENTRYPOINTwenn er ausgeführt docker-compose upwird.

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

52

Was auch immer in der commandDatei docker-compose.yml angegeben ist, sollte an die in der Docker-Datei entrypointdefinierte angehängt werden, sofern dies in der Docker-Datei in ausführender entrypointForm definiert ist.

Wenn der EntryPoint in Shell-Form definiert ist, werden alle CMD-Argumente ignoriert.


20
Wie wäre es mit einigen Beispielen. Was ist "exec form"?
Aaron McMillin

13
ENTRYPOINT ["executable", "param1", "param2"](ausführendes Formular, bevorzugt) ENTRYPOINT command param1 param2(Shell-Formular) Referenz: Dockerfile-Referenz
jonasbn

16
Ein Beispiel würde dieser Antwort sehr helfen.
Dagrooms

32

Sie können die Argumente am Ende docker-compose runanstelle von verwenden docker-compose upund anheften. Beispielsweise:

docker-compose run dperson/samba arg1 arg2 arg3

Wenn Sie eine Verbindung zu anderen Docker-Containern herstellen müssen, können Sie die folgende --service-portsOption verwenden:

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

1
Leider im Schwarm ist dies keine Option
Holms

15

Verwenden Sie die entrypointOption, um den Standardeinstiegspunkt zu überschreiben . Um die Argumente zu übergeben, verwenden Sie command.

Hier ist das Beispiel für das Ersetzen bashdurch shim ubuntuBild:

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

Hier ist die Ausgabe:

$ 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

Ich hatte das gleiche Problem mit Jenkins SSH Slave ' Jenkinsi / SSH-Slave '. Mein Fall war jedoch etwas kompliziert, da ein Argument übergeben werden musste, das Leerzeichen enthielt. Ich habe es wie folgt geschafft (Einstiegspunkt in Dockerfile ist in Exec-Form):

command: ["some argument with space which should be treated as one"]
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.