Как указать аргументы запуска для базового образа в Dockerfile? - PullRequest
0 голосов
/ 11 февраля 2019

Я определяю изображение в Dockerfile, в котором родительское изображение имеет другое изображение:

FROM parent_org/parent:1.0.0
...

В документации родительского изображения упоминается аргумент (special-arg), который можно передать при запуске экземпляраконтейнер:

docker run parent_org/parent:1.0.0 --special-arg

Как включить special-arg в моем Dockerfile?

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

TL; DR: вы можете использовать директиву CMD, выполнив что-то вроде этого:

FROM parent_org/parent:1.0.0
CMD ["--special-arg"]

, однако обратите внимание, что передача дополнительных флагов docker run, как показано ниже, перезаписать --special-arg (поскольку CMD предназначено для указания по умолчанию аргументов):

docker build -t child_org/child .
docker run child_org/child  # would imply --special-arg

docker run child_org/child --other-arg  # "--other-arg" replaces "--special-arg"

Если это не то, что вы хотели бы получить, выследует переопределить ENTRYPOINT, как предложено ниже.

Директивы CMD и ENTRYPOINT

Чтобы получить больше информации о CMD, а также о ENTRYPOINT, вы можете взглянуть на таблица , участвующая в этом другом ответе SO: CMD не запускается после ENTRYPOINT в Dockerfile .

В вашем случае вы можете переопределить ENTRYPOINT в вашем child image (и, если необходимо, значение по умолчанию CMD) путем адаптации child_org/child/Dockerfile по сравнению с тем, что было определено в parent Dockerfile.

Предполагается, что parent_org/parent/Dockerfile выглядит следующим образом:

FROM debian:stable  # for example

WORKDIR /usr/src/foo
COPY entrypoint.sh .
RUN chmod a+x entrypoint.sh

ENTRYPOINT ["./entrypoint.sh"]
CMD ["--default-arg"]

Вы можете написать child_org/child/Dockerfile так:

FROM parent_org/parent:1.0.0
RUN […]

# Redefine the ENTRYPOINT so the --special-arg flag is always passed
ENTRYPOINT ["./entrypoint.sh", "--special-arg"]

# If need be, redefine the list of default arguments,
# as setting ENTRYPOINT resets CMD to an empty value:
CMD ["--default-arg"]
0 голосов
/ 11 февраля 2019

Это поначалу меня тоже озадачило ... Запустите их, используя декларацию command: ... Команда и точка входа - это две разные вещи ... Точка входа запускает любой сценарий / выполнение, которое требуется вашей службе для инициализации иНачните.Этот сценарий входа обычно запускает логику для добавления того, что вы передаете из объявления command:, в качестве дополнительных аргументов для изменения поведения службы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...