Как переопределить / обнаружить CMD / ENTRYPOINT для базового изображения - PullRequest
0 голосов
/ 26 сентября 2019

Скажите, у меня есть это:

FROM oresoftware/lmx-broker:0.2.1

ENTRYPOINT ['/docker-entrypoint.sh']

, если я не использую CMD, будет CMD по умолчанию значение, установленное в базовом изображении?Будет ли мое использование ENTRYPOINT переопределять ENTRYPOINT в базовом изображении?Будет ли мое использование CMD переопределять CMD в базовом изображении?

В основном моя цель - переопределить ENTRYPOINT базового изображения, но иметь возможность обнаружить / повторно использовать CMD, чтобы мой файл docker-entrypoint.sh выглядел следующим образом:

#!/bin/sh

"$@" | capture-stdio

где"$ @" будет по умолчанию CMD из базового образа.

Ответы [ 3 ]

2 голосов
/ 26 сентября 2019

Из документов:

Примечание. Если CMD определено на базовом изображении, настройка ENTRYPOINT сбросит CMD до пустого значения.
В этом случае CMD должен быть определен в текущем изображении, чтобы иметь значение.

Так что, чтобы ответить на ваш вопрос, это не сработает. Читать дальше

Удачи.

0 голосов
/ 26 сентября 2019

Итак, согласно моему недавнему тестированию, в parent / base Dockerfile у меня есть:

ENTRYPOINT ["node", "dist/lm-start-server.js"]
CMD []

, а затем в child Dockerfile у меня есть:

ENTRYPOINT ["/cmds/docker-entrypoint.sh"]
CMD ["node", "dist/lm-start-server.js"]

, поэтому ENTRYPOINT переопределяется , но тогда я должен предоставить CMD ребенку.Так что это работает.

лучшее потенциальное решение было бы просто использовать CMD в родительском элементе и опустить ENTRYPOINT в родительском.Тогда у ребенка нам нужно только использовать ENTRYPOINT.Но я не уверен, возможно ли это.

0 голосов
/ 26 сентября 2019

Если вы используете ENTRYPOINT ['/docker-entrypoint.sh'] в вашем Dockerfile, он переопределит точку входа.

Проще говоря, если вы используете что-либо, что определено в базовом изображении, и вы переопределили в своем изображении, оно будет переопределенолибо CMD или entrypoint, либо любая другая конфигурация, например ENV и т. д.

Как только вы определили точку входа в своем Dockerfile, любая вещь, переданная в CMD, будет рассматриваться как аргумент для точки входа.

Для просмотра CMD и entrypoint базового изображения просто запустите

docker inspect oresoftware/lmx-broker:0.2.1

или для просмотра точки входа базового изображения

docker run --rm oresoftware/lmx-broker:0.2.1 bash -c "cat path_to_entrypoint"

...