Як передавати аргументи до вхідної точки в docker-compose.yml


159

Я використовую це зображення: dperson / samba

Зображення визначає власну точку входу, і я не хочу її переосмислювати.

Мені потрібно передати аргументи до точки входу, легко лише з докером:

docker run ... dperson/samba arg1 arg2 arg3

Але як це зробити з docker_compose.yml?

Зараз я використовую як вирішення:

command: samba.sh arg1 arg2 arg3

Але це не задовольняє, оскільки я змушую переглядати точку входу.

Відповіді:


128

Ця commandстаття працює так, як сказано вище @Karthik.

В якості простого прикладу, наступна послуга матиме -inMemoryдодана до його ENTRYPOINTпри docker-compose upзапуску.

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

52

Все, що зазначено в docker-compose.yml, слід додати commandдо entrypointвизначеного в Dockerfile, якщо entrypointце визначено у виконанні у Dockerfile.

Якщо EntryPoint визначений у формі оболонки, будь-які аргументи CMD будуть ігноровані.


20
Як щодо деяких прикладів. Що таке "виконати форму"?
Аарон Мак-Міллін

13
ENTRYPOINT ["executable", "param1", "param2"](форма exec, бажано) ENTRYPOINT command param1 param2(форма оболонки) Довідка: Довідкова посилання на
Dockerfile

16
Приклад дуже допоможе цій відповіді.
Dagrooms

32

Ви можете використовувати docker-compose runзамість docker-compose upаргументів та бракувати до кінця аргументи. Наприклад:

docker-compose run dperson/samba arg1 arg2 arg3

Якщо вам потрібно підключитися до інших контейнерів докера, використовуйте --service-portsпараметр:

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

1
на жаль, у рій це не варіант
загрожує

15

Щоб замінити стандартну точку входу, використовуйте entrypointопцію . Для передачі аргументів використовуйте command.

Нижче наведено приклад заміни bashз shв ubuntuзображенні:

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

Ось вихід:

$ 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

Я зіткнувся з тією ж проблемою з jenkins ssh slave ' jenkinsci / ssh-slave '. Однак мій випадок був трохи складним, тому що потрібно було передавати аргумент, який містив пробіли. Мені вдалося зробити це як нижче (точка входу в dockerfile - у виконанні):

command: ["some argument with space which should be treated as one"]
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.