Dockerfile 的 ENTRYPOINT 与 CMD
时间:2022-07-23
本文章向大家介绍Dockerfile 的 ENTRYPOINT 与 CMD,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Dockerfile 的 ENTRYPOINT 与 CMD
Dockerfile 的 ENTRYPOINT 与 CMD
Dockerfile 有两个启动配置, CMD
和 ENTRYPOINT
, 可以在 Dockerfile 中来配置容器启动时自动执行的命令, 但是这二者有什么区别呢, 接下来总结如下:
首先来看一下 CMD
, 有三种格式的配置, 分别是:
-
CMD ["executable","param1","param2"]
(exec 格式, 推荐的格式) -
CMD ["param1","param2"]
(作为 ENTRYPOINT 的默认参数) -
CMD command param1 param2
(shell 格式)
在使用时, 要注意一下问题:
- 包含可执行文件时, 为容器指定默认执行命令, 这个是主要用途;
- 不包含可执行文件时, 必须提供
ENTRYPOINT
配置,CMD
作为默认参数; - Dockerfile 中只能有一个
CMD
起效, 如果出现了多个, 则最后一个起效;
而 ENTRYPOINT
, 有两种格式的配置, 分别是:
- ENTRYPOINT [“executable”, “param1”, “param2”] (exec 格式, 推荐)
- ENTRYPOINT command param1 param2 (shell 格式)
CMD
和 ENTRYPOINT
两种配置格式的区别是:
-
exec 格式
推荐这种格式, 使用这种模式时, 可以不需要 shell 进程, 让 Docker 应用的可执行程序成为容器的PID 1
进程, 可以接收 Unix 信号, 比如执行docker stop <container>
时能够接收到SIGTERM
。 -
shell 格式
会始终调用一个 shell 进程, 成为/bin/sh -c
的子命令, 可执行程序不能响应 Unix 信号。
注意:
ENTRYPOINT
使用shell 格式
时, 会忽略CMD
和run
传入的参数, 如果要替换默认的ENTRYPOINT
命令, 则需要在执行 docker run 的时候指定--entrypoint
参数。
当 CMD
和 ENTRYPOINT
的使用总结如下:
- 在 Dockerfile 中, 应该至少指定一个
CMD
和ENTRYPOINT
; - 将 Docker 当作可执行程序时, 应该使用
ENTRYPOINT
进行配置; -
CMD
可以用作ENTRYPOINT
默认参数, 或者用作 Docker 的默认命令; -
CMD
可以被 docker run 传入的参数覆盖; - docker run 传入的参数会附加到
ENTRYPOINT
之后, 前提是使用了exec 格式
。
- 使用Seq2Seq+attention实现简单的Chatbot
- R语言可视化——用ggplot构造期待已久的雷达图
- 【实战】最新Deep Learning with Keras图书加代码,教你从零开发一个复杂深度学习模型(附下载)
- 基于zabbix 自动抓取每天监控数据!/usr/local/python/bin/python3.5
- 大过年的,一起来用Seq2Seq来作对联吧!
- python3 下调用zabbix api 获取多个机房的IP
- TensorFlow从0到1 - 14 - 交叉熵损失函数——防止学习缓慢
- 用优雅的配色来缔造图表专业主义~
- python文件名与包名冲突
- python3 Zabbix监控-api的使用-python
- 安装python虚拟环境
- 各种排序算法的分析及java&python实现
- python3elk相关---根据Elasticsearch(es)日志处理,生成excel并定时邮箱发送附件
- python数据科学-数据预处理
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- YOLOv4 中的 Mish 激活函数
- pdbsplit将多个chain的pdb文件分割
- rk3399 wifi和eth0共存 调试
- 23条JavaScript初学者应知的最佳实践方法
- 黑板客爬虫闯关游戏
- Python自学成才之路 多进程开发
- Python自学成才之路 进程间通信
- android 功耗(1)---android 功耗分析方法和优化
- 为什么要写 tf.Graph().as_default()
- tf.get_variable_scope().reuse_variables() 的使用
- Tensorflow小技巧整理:
- Tensorflow学习笔记——Summary用法
- 神经网络优化(损失函数:自定义损失函数、交叉熵、softmax())
- C++ STL stack 用法
- 遍历string时 使用for(char& c : s) for(char c : s) 的区别