Docker-compose.yml dosyasında argümanları girdi noktasına nasıl iletirim


159

Bu resmi kullanıyorum: dperson / samba

Görüntü kendi giriş noktasını tanımlıyor ve geçersiz kılmak istemiyorum.

Ben sadece docker ile giriş noktasına argümanlar geçmek gerekir:

docker run ... dperson/samba arg1 arg2 arg3

Ama docker_compose.yml ile nasıl yapılır?

Şu anda bir geçici çözüm olarak kullanıyorum:

command: samba.sh arg1 arg2 arg3

Ancak, giriş noktasının yeniden tanımlanmasını zorladığım için tatmin edici değil.

Yanıtlar:


128

command@Karthik yukarıda söylediği gibi fıkra çalışır.

Basit bir örnek olarak, aşağıdaki hizmet olacaktır -inMemoryonun ilave ENTRYPOINTzaman docker-compose upçalıştırılır.

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

52

Belirtilen her ne commanddocker-compose.yml olarak eklenmiş olsun gerekir entrypoint, Dockerfile tanımlanan mesafede entrypointDockerfile exec şekilde tanımlanmıştır.

EntryPoint kabuk biçiminde tanımlanmışsa, CMD bağımsız değişkenleri yok sayılır.


20
Bazı örneklere ne dersiniz? "Yürütme formu" nedir?
Aaron McMillin

13
ENTRYPOINT ["executable", "param1", "param2"](exec formu, tercih edilen) ENTRYPOINT command param1 param2(shell form) Referans: Dockerfile referansı
jonasbn

16
Bir örnek bu cevaba çok yardımcı olacaktır.
Dagrooms

32

Sondaki argümanları kullanmak docker-compose runyerine kullanabilirsiniz docker-compose up. Örneğin:

docker-compose run dperson/samba arg1 arg2 arg3

Diğer docker konteynerlerine bağlanmanız gerekiyorsa, kullanın --service-portsseçeneğini kullanın:

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

1
ne yazık ki sürüsü içinde bu bir seçenek değil
holms

15

Varsayılan giriş noktasını geçersiz kılmak için entrypointseçeneğini kullanın . Bağımsız değişkenleri geçmek için kullanın command.

İşte değiştirme örneğidir bashile shde ubunturesmin:

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

İşte çıktı:

$ 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

Aynı sorunla jenkins ssh köle ' jenkinsci / ssh-slave ' ile karşı karşıya kaldım . Ancak benim durumum biraz karmaşıktı, çünkü boşluk içeren bir argümanı geçmek gerekiyordu. Aşağıdaki gibi yapmayı başardım (dockerfile giriş noktası exec formundadır):

command: ["some argument with space which should be treated as one"]
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.