Как передать аргументы в точку входа в 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

Все, что указано в commandфайле docker-compose.yml, должно быть добавлено к entrypointопределенному в Dockerfile, при условии, что entrypointоно определено в форме exec в Dockerfile.

Если EntryPoint определен в форме оболочки, то любые аргументы CMD будут игнорироваться.


20
Как насчет некоторых примеров. Что такое "форма exec"?
Аарон Макмиллин

13
ENTRYPOINT ["executable", "param1", "param2"](форма exec, предпочтительно) ENTRYPOINT command param1 param2(форма оболочки) Ссылка: ссылка на
файл

16
Пример очень поможет этому ответу.
Dagrooms

32

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

docker-compose run dperson/samba arg1 arg2 arg3

Если вам нужно подключиться к другим док-контейнерам, используйте команду use --service-ports:

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

1
к сожалению, в рое это не вариант
Холмс

16

Чтобы переопределить точку входа по умолчанию, используйте 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 находится в форме exec):

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