【问题标题】:dockerfile: how use CMD or ENTRYPOINT from base imagedockerfile:如何使用基础镜像中的 CMD 或 ENTRYPOINT
【发布时间】:2017-08-31 10:07:21
【问题描述】:

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

我不知道如何告诉 dockerfile 复制基本映像的 CMD(或 ENTRYPOINT)。像这样的:

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

我认为 CMD 命令没有任何直接的语法来执行我想要的操作。我想知道是否有解决方法。

【问题讨论】:

    标签: docker dockerfile docker-build


    【解决方案1】:

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

    希望对你有帮助

    【讨论】:

      【解决方案2】:

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

      例如:

      基础

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

      layer1

      FROM base
      

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

      $ sudo docker run -it layer1
      AAA
      

      【讨论】:

      • 我以为我试过了,但失败了。但我又试了一次,它确实有效。
      • @Vor ENTRYPOINT 不同吗?如果我的图像和基础都有一个入口点怎么办?
      • @williamli 如果你省略 ENTRYPOINT,它也会从基础镜像中获取
      猜你喜欢
      • 1970-01-01
      • 2018-12-31
      • 1970-01-01
      • 1970-01-01
      • 2021-04-23
      • 2019-07-11
      • 2019-02-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多