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.

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

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.


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

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

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"]
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.