仅来自基础映像的具有入口点的 Dockerfile

Dockerfile with entrypoint only from base image

我有一个非常简单的 Dockerfile,如下所示:-

FROM my-base-image
COPY abc.properties /opt/conf/

现在我的基础镜像有一个 docker 入口点(在它的 Dockerfile 的末尾)但是你可以看到这个生成的镜像有 none。这行得通吗,或者我们是否需要在任何给定的 Dockerfile 中有一个 docker entrypoint/CMD。另外,结果图像中 COPY 指令的执行顺序是什么。我的意思是,因为这个 Dockerfile 没有入口点,所以它会从基础镜像执行一个入口点,但是它将在 COPY 指令之后执行,或者是先执行基础镜像入口点,然后在容器启动时执行这个 COPY 指令 只是在 docker.

中寻找概念

构建映像时,Dockerfile 会按照它们的说明进行合并。构建图像并不意味着它可以运行。因此,理想情况下,来自 Base Dockerfile 和当前 Dockerfile 的指令将被打包。由于您在基本 Dockerfile 中提到了 CMD 入口点,当您使用 docker run.
时,它将用于在容器内执行您的图像 因此,当您构建镜像时,子 Dockerfile 中的 COPY 语句也将被设置。并且您的图像必须构建良好。 执行您的 docker builddocker run 并让我们知道

几个 Docker 文件指令(特别是 ENTRYPOINT 和 CMD,还有 EXPOSE、LABEL 和 MAINTAINER)只是在映像中设置元数据;他们自己什么都不做。在单个 Docker 文件中,这将正常工作:

FROM ubuntu:18.04
WORKDIR /app
# Just remembers this in the image metadata; doesn't actually run it
CMD ["/app/main.sh"]
# ...we should actually copy the file in too
COPY main.sh /app

当你有一个 Docker 文件从另一个图像构建时,它的行为几乎完全像你 运行 第一个 Docker 文件中的所有命令,然后是第二个 Docker 文件。由于CMD和ENTRYPOINT只是设置了元数据,所以第二张图片继承了这个元数据。

构建和运行图像是两个独立的步骤。在您显示的示例中, COPY 指令发生在 docker build 步骤期间,并且基本图像的命令直到后面的 docker run 步骤才会生效。 (这在 Docker Compose 中也是如此;一个常见的问题是为什么 Docker 文件步骤无法连接到 Compose YAML 文件中声明的其他容器。)

有一个例外,它在 ENTRYPOINT 附近。如果您有一个同时声明了 ENTRYPOINT 和 CMD 的基础映像,并且您在派生映像中重新声明了 ENTRYPOINT,it resets the CMD as well(本节的最后一段)。这通常不是实际问题。