dockerfile:如何使用基本映像中的 CMD 或 ENTRYPOINT
dockerfile: how use CMD or ENTRYPOINT from base image
我有几个基础 docker 图像不属于我(所以我不能修改它们)。但是,我正在从它们创建新图像并安装其他东西。
我想不通的是如何告诉 dockerfile 复制基本图像的 CMD(或 ENTRYPOINT)。像这样:
FROM other:latest
RUN my-extra-install
CMD <use-the-CMD-from-base-image>
我认为 CMD 命令没有任何直接的语法来执行我想要的操作。我想知道是否有解决方法。
如果您在新的 Dockerfile 中将其留空,它将继承基础映像中的那个。
例如:
基础
FROM ubuntu
CMD ["echo", "AAA"]
layer1
FROM base
如果您构建以上图像并且 运行 layer1
您将得到以下内容:
$ sudo docker run -it layer1
AAA
@Vor 是对的。但万一
# Dockerfile
FROM nginx:stable-alpine
ENTRYPOINT ["/docker-entrypoint.sh"]
COPY ./docker-entrypoint.sh /
和
# docker-entrypoint.sh
#!/usr/bin/env sh
set -e
exec "$@"
nginx:stable-alpine
中的默认 CMD 不会在 exec "$@"
中执行。
你必须在 Dockerfile
中自己编写(!)默认的 nginx-alpine CMD
# 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;"
希望对您有所帮助
我有几个基础 docker 图像不属于我(所以我不能修改它们)。但是,我正在从它们创建新图像并安装其他东西。
我想不通的是如何告诉 dockerfile 复制基本图像的 CMD(或 ENTRYPOINT)。像这样:
FROM other:latest
RUN my-extra-install
CMD <use-the-CMD-from-base-image>
我认为 CMD 命令没有任何直接的语法来执行我想要的操作。我想知道是否有解决方法。
如果您在新的 Dockerfile 中将其留空,它将继承基础映像中的那个。
例如:
基础
FROM ubuntu
CMD ["echo", "AAA"]
layer1
FROM base
如果您构建以上图像并且 运行 layer1
您将得到以下内容:
$ sudo docker run -it layer1
AAA
@Vor 是对的。但万一
# Dockerfile
FROM nginx:stable-alpine
ENTRYPOINT ["/docker-entrypoint.sh"]
COPY ./docker-entrypoint.sh /
和
# docker-entrypoint.sh
#!/usr/bin/env sh
set -e
exec "$@"
nginx:stable-alpine
中的默认 CMD 不会在 exec "$@"
中执行。
你必须在 Dockerfile
中自己编写(!)默认的 nginx-alpineCMD
# 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;"
希望对您有所帮助