Dockerfile-ENTRYPOINT(它指定容器启动时要运行什么可执行文件)


The exec form, which is the preferred form:

ENTRYPOINT ["executable", "param1", "param2"] 

The shell form:

ENTRYPOINT command param1 param2

请注意
exec表单被解析为JSON数组,这意味着必须在单词周围使用双引号(")而不是单引号(')。
  与shell表单不同,exec表单不调用命令shell。这意味着正常的shell处理不会发生。例如,ENTRYPOINT ["echo", "$HOME"]不会对$HOME进行变量替换。如果需要shell处理,那么要么使用shell形式,要么直接执行shell,例如:ENTRYPOINT ["sh", "-c", "echo $HOME"]。当使用exec表单并直接执行shell时(就像使用shell表单一样),是shell执行环境变量展开,而不是docker。


示例:
vim Dockerfile

FROM ubuntu
ENTRYPOINT ["top","-o","%MEM"]

通过上面的运行结果可以看出,docker run命令指定的容器运行命令不能覆盖Dockerfile文件中ENTRYPOINT指令指定的命令,反而被当做参数传递给ENTRYPOINT指令指定的命令之后

 

docker运行的命令行参数将被附加在执行表单ENTRYPOINT的所有元素之后,并将覆盖使用CMD指定的所有元素。

vim Dockerfile

FROM ubuntu
ENTRYPOINT ["top","-p","1"]
CMD ["-o","%MEM"]

 

docker build -t ubuntu:t7 .
Sending build context to Docker daemon 2.048kB
Step 1/3 : FROM ubuntu
---> 1318b700e415
Step 2/3 : ENTRYPOINT ["top","-p","1"]
---> Using cache
---> 2648b9534628
Step 3/3 : CMD ["-o","%MEM"]
---> Running in d0496db85c77
Removing intermediate container d0496db85c77
---> c3c934e21488
Successfully built c3c934e21488
Successfully tagged ubuntu:t7

 

docker run -it ubuntu:t7 | grep "load average"

top - 10:15:32 up  8:01,  0 users,  load average: 0.39, 0.62, 0.77

 

 

 

 

如果使用CMD为ENTRYPOINT指令提供默认参数,则应使用JSON数组格式指定CMD和ENTRYPOINT指令

vim Dockerfile

FROM ubuntu
ENTRYPOINT ["top","-p","1"]
CMD ["-o","%MEM"]

 


  


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM