28

我有几个不属于我的基础 docker 镜像(所以我无法修改它们)。但是,我正在从它们创建新图像,并安装了其他东西。

我想不通的是如何告诉 dockerfile 复制基本映像的 CMD(或 ENTRYPOINT)。像这样的东西:

FROM other:latest
RUN my-extra-install
CMD <use-the-CMD-from-base-image>

我认为 CMD 命令没有任何直接的语法来做我想做的事。我想知道是否有解决方法。

4

2 回答 2

48

如果您在新的 Dockerfile 中将其留空,它将继承基础映像中的那个。

例如:

根据

FROM ubuntu
CMD ["echo", "AAA"]

第一层

FROM base

如果您构建上述图像并运行layer1,您将获得以下信息:

$ sudo docker run -it layer1
AAA
于 2017-04-05T17:07:16.730 回答
3

@Vor 是对的。但万一

# Dockerfile
FROM nginx:stable-alpine
ENTRYPOINT ["/docker-entrypoint.sh"]
COPY ./docker-entrypoint.sh /

# docker-entrypoint.sh
#!/usr/bin/env sh
set -e
exec "$@"

默认 CMD fromnginx:stable-alpine不会在exec "$@".

您必须CMD在 Dockerfile 中自己编写默认的 nginx-alpine(!)

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

希望能帮助到你

于 2019-03-01T11:58:09.297 回答