webentwicklung-frage-antwort-db.com.de

Wie übergeben Sie Argumente an entrypoint in docker-compose.yml

Ich verwende dieses Bild: dperson/samba

Das Bild definiert seinen eigenen Eingangspunkt und ich möchte es nicht überschreiben.

Ich muss Argumente an den Eingangspunkt ü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

Es ist jedoch nicht befriedigend, da ich die Neudefinition des Eingangspunkts erzwinge.

84
user1707414

Die command-Klausel funktioniert wie @Karthik oben.

Als einfaches Beispiel wird dem folgenden Dienst ein -inMemory hinzugefügt, wenn ENTRYPOINT ausgeführt wird, wenn docker-compose up ausgeführt wird.

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

Was in command in docker-compose.yml angegeben ist, sollte an die in der Docker-Datei definierte entrypoint angehängt werden, vorausgesetzt, entrypoint wird in der Dockerfile-Ausführung definiert.

Wenn der EntryPoint im Shell-Formular definiert ist, werden alle CMD-Argumente ignoriert.

33
Karthik

Sie können docker-compose run anstelle von docker-compose up verwenden und die Argumente am Ende anheften. Zum Beispiel:

docker-compose run dperson/samba arg1 arg2 arg3

Wenn Sie eine Verbindung zu anderen Docker-Containern herstellen müssen, verwenden Sie die Option --service-ports:

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

Ich war mit demselben Problem mit jenkins ssh slave ' jenkinsci/ssh-slave ' konfrontiert, jedoch war mein Fall etwas kompliziert, da ein Argument übergeben werden musste, das Leerzeichen enthielt. Ich habe es wie folgt geschafft (Entypoint in Dockerfile ist in Exec-Form):

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

Hoffe, das hilft. Danke.

6
Alina Grosu

Verwenden Sie die Option entrypoint - Option , um den Standardeingabepunkt zu überschreiben.

Hier ist das Beispiel für das Ersetzen von bash durch sh in ubuntu image:

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
0
kenorb