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.