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;"

Надеюсь, поможет

Другие вопросы по тегам