dockerfile: как использовать CMD или ENTRYPOINT из базового образа
У меня есть несколько базовых образов докера, которые мне не принадлежат (поэтому я не могу их изменить). Тем не менее, я создаю новые образы из них с установленными дополнительными вещами.
Чего я не могу понять, так это сказать, как dockerfile скопировать CMD (или ENTRYPOINT) базового образа. Что-то вроде этого:
FROM other:latest
RUN my-extra-install
CMD <use-the-CMD-from-base-image>
Я не думаю, что есть прямой синтаксис для команды CMD, чтобы делать то, что я хочу. Мне интересно, есть ли обходной путь.
1 ответ
Если вы оставите его пустым в новом Dockerfile, он унаследует его от базового образа.
Например:
база
FROM ubuntu
CMD ["echo", "AAA"]
layer1
FROM base
Если вы строите выше изображения и запускаете layer1
вы получите следующее:
$ sudo docker run -it layer1
AAA
@ Вор прав. Но в случае
# Dockerfile
FROM nginx:stable-alpine
ENTRYPOINT ["/docker-entrypoint.sh"]
COPY ./docker-entrypoint.sh /
а также
# docker-entrypoint.sh
#!/usr/bin/env sh
set -e
exec "$@"
CMD по умолчанию от nginx:stable-alpine
не будет выполнен в exec "$@"
,
Вы должны написать nginx-alpine's по умолчанию CMD
самостоятельно (!) в Dockerfile
# Dockerfile
FROM nginx:stable-alpine
ENTRYPOINT ["/docker-entrypoint.sh"]
CMD ["nginx", "-g", "daemon off;"]
COPY ./docker-entrypoint.sh /
ИЛИ измените ваш docker-entrypoint.sh
# docker-entrypoint.sh
#!/usr/bin/env sh
set -e
exec nginx -g "daemon off;"
Надеюсь, поможет