
ENTRYPOINT 入口点
ENTERPOINT 可以在docker run --entrypoint
被替代
ENTRYPOINT 和 CMD 一样都可以指定容器启动时候参数
命令或者 sh 都为容器中的
命令形式
比如 dockerfile 如下:
FROM ubuntu:18.04
RUN apt-get update \
&& apt-get install -y curl \
&& rm -rf /var/lib/apt/lists/*
ENTRYPOINT [ "curl", "-s", "http://ip.cn" ]
写成这样也是一样的效果:
FROM ubuntu:18.04
RUN apt-get update \
&& apt-get install -y curl \
&& rm -rf /var/lib/apt/lists/*
CMD [ "curl", "-s", "http://ip.cn" ]
其实就是相当于 docker run 的同时执行了curl -s http://ip.cn
这个命令
但是要注意的是 docker run 后可以跟上命令,跟上的命令会自动替代掉 dockerfile 中的 CMD,但是不会替代掉 ENTRYPOINT,这是 CMD 和 ENTRYPOINT 的一个不同点
如果 dockerfile 中写的是 ENTRYPOINT 和 CMD 呢,CMD 会拼接到 ENTRYPOINT 后,作为 ENTRYPOINT 的参数
FROM ubuntu:18.04
RUN apt-get update \
&& apt-get install -y curl \
&& rm -rf /var/lib/apt/lists/*
CMD [ "-i" ]
ENTRYPOINT [ "curl", "-s", "http://ip.cn" ]
sh 形式
由于我们在启动一个容器之前,可能需要进行一些容器中工具的初始化配置等工作,因此我们可能需要写一个 shell 脚本,然后放到 ENTRYPOINT 中去执行,ENTRYPOINT 是可以接收到 CMD 的传参的,因此 sh 可以接收到 CMD 的传参
写法是容器中 sh 文件路径
ENTRYPOINT ["root/entrypoint.sh"]
CMD 启动命令
命令为容器中的命令
命令形式
第一种
第一种和 ENTRYPOINT 一样
CMD [ "curl", "-s", "http://ip.cn" ]
第二种
CMD curl -s http://ip.cn
参数列表
CMD 指令可以作为 ENTRYPOINT 的传参
CMD ["param1", "param2", "param3"]