Cara meneruskan argumen ke titik masuk di docker-compose.yml

158

Saya menggunakan gambar ini: dperson / samba

Gambar mendefinisikan titik masuknya sendiri dan saya tidak ingin menimpanya.

Saya perlu meneruskan argumen ke titik masuk, mudah dengan buruh pelabuhan saja:

docker run ... dperson/samba arg1 arg2 arg3

Tetapi bagaimana melakukannya dengan docker_compose.yml?

Saat ini saya menggunakan solusi:

command: samba.sh arg1 arg2 arg3

Tapi itu tidak memuaskan karena saya memaksakan redefinisi dari pintu masuk.

pengguna1707414
sumber

Jawaban:

127

The commandklausul tidak bekerja sebagai @Karthik kata di atas.

Sebagai contoh sederhana, layanan berikut akan -inMemoryditambahkan ke ENTRYPOINTketika docker-compose updijalankan.

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

Apa pun yang ditentukan dalam commandin docker-compose.yml harus ditambahkan ke yang entrypointdidefinisikan di Dockerfile, asalkan entrypointdidefinisikan dalam bentuk exec di Dockerfile.

Jika EntryPoint didefinisikan dalam bentuk shell, maka setiap argumen CMD akan diabaikan.

Karthik
sumber
20
Bagaimana dengan beberapa contoh. Apa itu "formulir exec"?
Aaron McMillin
13
ENTRYPOINT ["executable", "param1", "param2"](formulir exec, lebih disukai) ENTRYPOINT command param1 param2(bentuk shell) Referensi: Referensi Dockerfile
jonasbn
16
Contoh akan sangat membantu jawaban ini.
Dagroom
32

Anda bisa menggunakan docker-compose runalih-alih docker-compose updan menempelkan argumen di bagian akhir. Sebagai contoh:

docker-compose run dperson/samba arg1 arg2 arg3

Jika Anda perlu terhubung ke kontainer buruh pelabuhan lain, gunakan bisa menggunakan --service-portsopsi:

docker-compose run --service-ports dperson/samba arg1 arg2 arg3
afaulconbridge
sumber
1
sayangnya di gerombolan ini bukan pilihan
holms
15

Untuk mengganti titik masuk default, gunakan entrypointopsi . Untuk melewati argumen gunakan command.

Berikut adalah contoh penggantian bashdengan shdalam ubuntugambar:

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

Berikut hasilnya:

$ 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
kenorb
sumber
13

Saya menghadapi masalah yang sama dengan jenkins ssh slave ' jenkinsci / ssh-slave '. Namun, kasus saya agak rumit karena itu perlu melewati argumen yang berisi spasi. Saya telah berhasil melakukannya seperti di bawah ini (entrypoint di dockerfile dalam bentuk exec):

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