docker的entrypoint的override关系
这篇文章分析一下Dockerfile
当中override的关系。我们首先写一个Dockerfile
:
FROM alpine
RUN echo "echo 'Hello, world'" > /tmp/run.sh
ENTRYPOINT sh /tmp/run.sh
把它build成叫做foo
的image:
此时使用这个image创建一个container并运行:
$ docker run -it foo sh
Hello, world
可以看到entrypoint
当中定义的脚本生效了。此时再写一个dockerfile
使用foo
这个image:
FROM foo
RUN echo "echo 'Hello, world2'" > /tmp/run2.sh
ENTRYPOINT sh /tmp/run2.sh
这个dockerfile
是继承了foo
的image,并且自己又定义了一个ENTRYPOINT
,为run2.sh
。那么我们build这个image,然后用这个image创建并运行container,它的entrypoint脚本会运行自己的,还是继承的foo
的呢?实际实验过程如下:
可以看到它运行的是自己的image的entrypoint脚本run2.sh
。所以说image自己的entrypoint设定会override它的parent的entrypoint脚本。那么我们把当前image的entrypoint取消掉呢?还是做实验试试看:
上面是取消了这个dockerfile的entrypoint。然后重新build并运行:
可以看到它会使用parent image的entrypoint脚本了。以上就是entrypoint脚本的继承关系。此外,我们还可以再运行时指定entry point:
具体可以参考这篇文档:
以上就是对docker的entrypoint的一个说明。