CMD 容器启动命令

一文看懂 Dockerfile的 CMD 与 ENTRYPOINT 命令区别 主机 宿主机:VirtualBox:docker-machine docker 所以我们在 Windows系统上运行docker命令时首先要启动docker-machine docker-machine start default 而docker-machine可以创建多个,默认执行docker命令是在名称为 default 的 docker-machine 下执行的,如果想要修改的话可以到环境变量中修改名为 DOCKER_MACHINE的环境变量即可 . # git bash 中执行打开资源管理器 s 阅读详情

原文:https://yeasy.gitbooks.io/docker_practice/image/dockerfile/cmd.html

 

CMD 指令的格式和 RUN 相似,也是两种格式:

  • shell 格式:CMD <命令>
  • exec 格式:CMD ["可执行文件", "参数1", "参数2"...]
  • 参数列表格式:CMD ["参数1", "参数2"...]。在指定了 ENTRYPOINT 指令后,用 CMD 指定具体的参数。

之前介绍容器的时候曾经说过,Docker 不是虚拟机,容器就是进程。既然是进程,那么在启动容器的时候,需要指定所运行的程序及参数。CMD 指令就是用于指定默认的容器主进程的启动命令的。

在运行时可以指定新的命令来替代镜像设置中的这个默认命令,比如,ubuntu 镜像默认的 CMD 是 /bin/bash,如果我们直接 docker run -it ubuntu 的话,会直接进入 bash。我们也可以在运行时指定运行别的命令,如 docker run -it ubuntu cat /etc/os-release。这就是用 cat /etc/os-release 命令替换了默认的 /bin/bash 命令了,输出了系统版本信息。

在指令格式上,一般推荐使用 exec 格式,这类格式在解析时会被解析为 JSON 数组,因此一定要使用双引号 ",而不要使用单引号。

如果使用 shell 格式的话,实际的命令会被包装为 sh -c 的参数的形式进行执行。比如:

CMD echo $HOME

在实际执行中,会将其变更为:

CMD [ "sh", "-c", "echo $HOME" ]

这就是为什么我们可以使用环境变量的原因,因为这些环境变量会被 shell 进行解析处理。

提到 CMD 就不得不提容器中应用在前台执行和后台执行的问题。这是初学者常出现的一个混淆。

Docker 不是虚拟机,容器中的应用都应该以前台执行,而不是像虚拟机、物理机里面那样,用 upstart/systemd 去启动后台服务,容器内没有后台服务的概念。

一些初学者将 CMD 写为:

CMD service nginx start

然后发现容器执行后就立即退出了。甚至在容器内去使用 systemctl 命令结果却发现根本执行不了。这就是因为没有搞明白前台、后台的概念,没有区分容器和虚拟机的差异,依旧在以传统虚拟机的角度去理解容器。

对于容器而言,其启动程序就是容器应用进程,容器就是为了主进程而存在的,主进程退出,容器就失去了存在的意义,从而退出,其它辅助进程不是它需要关心的东西。

而使用 service nginx start 命令,则是希望 upstart 来以后台守护进程形式启动 nginx 服务。而刚才说了 CMD service nginx start 会被理解为 CMD [ "sh", "-c", "service nginx start"],因此主进程实际上是 sh。那么当 service nginx start 命令结束后,sh 也就结束了,sh 作为主进程退出了,自然就会令容器退出。

正确的做法是直接执行 nginx 可执行文件,并且要求以前台形式运行。比如:

CMD ["nginx", "-g", "daemon off;"]
(十)Docker 中CMD 和 ENTRYPOINT 的区别 CMD指令和ENTRYPOINT指令的作用都是为镜像指定容器启动后的命令,那么它们两者之间有什么各自的优点呢? 为了更好地对比CMD指令和ENTRYPOINT指令的差异,我们这里再列一下这两个指令的说明 CMD 支持三种格式 CMD ["executable","param1","param2"] 使用 exec 执行,推荐方式; CMD command param1 param2 在 /bin/sh 中执行,提供给需要交互的应用; CMD ["param1","param2"... 阅读详情

相关推荐

别再手动调时间了!用Windows自带的tzutil命令,1分钟搞定时区错误

本文介绍了如何使用Windows自带的tzutil命令快速解决时区错误问题。通过简单的命令行操作,用户可以一键切换时区、查看全球时区代码库,并实现自动化时区同步。相比传统GUI设置,tzutil更可靠且高效,特别适合企业环境批量部署。

weixin_42531494的博客 314

Docker 入门系列(7)- Dockerfile 使用(FROM、RUN、CMD、EXPOSE、ENV、ADD、COPY、ENTRYPOINT、VOLUME、WORKDIR)

使用 Dockerfile 创建镜像 Dockerfile 是一个文本格式的配置文件,用户可以使用 Dockerfile 来快速创建自定义的镜像。 1. 基本结构 Dockerfile 由一行行命令语句组成,并且支持以 # 开头的注释行。一般而言,Dockerfile,分为四部分: 基础镜像信息; 维护者信息; 镜像操作指令; 和容器启动时执行指令; 如下示例 # This Dockerf.........

wohu1104的专栏 5415

笔记汇总 | 斯坦福 CS229 机器学习

本文为斯坦福大学 2014 秋季 CS229 机器学习课程学习笔记本文主体部分转载自黄海广博士,文末已给出,大家有兴趣可以直接访问笔记首页,下载对应课程资料及作业代码。

ReturnTmp的博客 2463

Dockerfile指令(2):CMD

docker镜像以容器形式跑起来后,我们常常需要执行一些服务启动命令。 1. 通过docker run指定容器启动命令 我们知道,通过docker run创建并启动一个容器时,命令的最后可以指定在容器启动后,容器要立即执行的指令,如: # docker run -i -t ubunu /bin/bash //表示容器启动时立即在容器内打开一个shell终端 # docker run u...

yjk13703623757的博客 2913

保姆级教程:手把手教你为STM32F407和W25Q128制作Keil MDK的SPI Flash下载算法(FLM文件)

本文提供了一份详细的教程,指导开发者如何为STM32F407和W25Q128制作Keil MDK的SPI Flash下载算法(FLM文件)。从理解下载算法的核心机制到实现FlashPrg.c的核心操作,再到链接脚本与地址映射实战,手把手教你完成定制化SPI Flash下载算法的开发与优化。

weixin_28716769的博客 408

如何在SpringBoot中实现AI 流式输出?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 1479

docker 镜像制作、发布以及命令使用示例

一、制作镜像的办法: 1、第一种制作镜像的办法: (1)此方法必须在容器运行时 (2)制作指定id的容器为指定名字的镜像文件 (3)制作成功的镜像文件会提交到本地Docker镜像库 docker commit -a="xujianjun" -m="add cpp_httpserver" 459af5736ac9 centos_cpp_httpserver:1.0 2、第二种制作镜像的办法: Dockerfile FROM centos MAINTAINER xujianjun&lt..

xujianjun229的博客 1176

利用 HTML5 与 SICF 打造 CRM WebClient UI 多附件上传 —— 从原型到生产的全流程揭秘

通过HTML5 标准 + SICF 服务 + BOL/GOS API的三位一体方案,我们无需修改 SAP 标准代码,就能让 CRM WebClient UI 获得现代化的多附件上传体验。浏览器负责多选与进度提示,SICF 负责安全中转,ABAP 负责权限校验与落库。你可以先在质量系统快速原型,再逐步完善权限、异常处理与 UI 细节。按照本文的方法落地,哪怕一次上传几百份文件,也能轻松搞定,真正把时间还给业务。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 335

docker容器使用/bin/bash命令

问题描述 本地运行命令和docker运行命令的解释器不同,在本地已经是/bin/bash,但是docker中仍然是/bin/sh,需要修改docker中/bin/sh为/bin/bash 解决方案 1、首先看docker容器的详细信息。输入“docker container ls |grep xxxx”,看其中的命令部分,如果是“/bin/sh”说明使用的不一定是bash,可能是dash解释器。 使用命令ls -l /bin/sh,如果显示的是/bin/sh -> dash,说明用的是dash 2、

码间烟火录的博客,持续分享后端研发领域技术超干货! 1万+

基于cnn version_transformer VIT模型的动物图像分类 完整代码+数据 动物分类教程

基于cnn version_transformer VIT模型的动物图像分类 完整代码+数据 动物分类教程

机器学习深度学习业余选手 1001

网络速度的极致:800G & 1.6T 以太网的突破!

你好,这里是网络技术联盟站。在我们进入数据驱动的世界时,以太网的重要性日益突出。从根本上说,以太网是一种连接计算机的技术,旨在形成一个本地网,通过它,设备可以与其他设备进行通信。然而,随着时间的推移,以太网已经发展成为一种全球的数据通信系统,其速度从初始的10Mbit/s发展到现在的800G,甚至1.6T。这种巨大的进步并不是没有挑战的,但每一次的突破都代表了技术的巨大飞跃。本文将探讨800G和1.6T以太网的创新与挑战。

网络技术联盟站 1770

K8S系列第四篇(Dockerfile)

DokcerFile 镜像定制 更多精彩内容请关注微信公众号:新猿技术生态圈 定制docker镜像的方式有两种: 手动修改容器内容,导出新的镜像。 基于dockerfile自行编写指令,基于指令流程创建镜像。 Dockerfile简介 镜像是多层存储,每一层都是在前一层的基础上进行修改; 容器也是多层存储,以镜像为基础层,在其基础上加一层作为容器运行时的存储层。 刚才说了,创建镜像的两个方法: 手动修改容器内容,然后dokcer commit提交容器为新的镜像 通过在docker

Alvin 2035

基于HTML5的酒店在线预订系统设计与实现

1.背景介绍 酒店预订系统,作为现代酒店业务中的重要一环,其便捷性、智能化程度直接影响着酒店的服务质量和经营效果。近年来,随着互联网技术和移动设备的快速发展,以及消费者行为的日益电子化,酒店预订系统也正在经历一场深刻的变革。传统的酒店预订系统往往依赖于复杂的软件安装和硬件设备,而新一代的酒店预订系统则更加强调在线、移动和云端的特性。HTML5作为一种前

AI天才研究院 1909

Dockerfile指令详解: CMD 容器启动命令

CMD 容器启动命令 CMD 指令的格式和 RUN 相似,也是两种格式: shell 格式:CMD <命令> exec 格式:CMD ["可执行文件", "参数1", "参数2"...] 参数列表格式:CMD ["参数1", "参数2"...]。在指定了 ENTRYPOINT 指令后,用 CMD 指定具体的参数。 之前介绍容器的时候曾经说过,Docker 不是虚拟机,容器就是进程。既然是进程,那么在启动容器的时候,需要指定所运行的程序及参数。CMD 指令就是用于指定默认的容器主进程的启动命令

学亮编程手记 6340

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Docker教程小白实操入门(14)--如何使用CMD和ENTRYPOINT指令指定容器启动时要运行的命令

一、需求 为容器启动时指定需要运行的命令 二、CMD指令指定容器启动时运行的命令 # (shell格式) CMD <command> # 或 (exec格式,推荐格式) CMD [“executable”,”param1”,”param2”] # 或 (为ENTRYPOINT指令提供参数) CMD[”param1”,”param2”] 例如: # 等同于CMD echo $HOME CMD [ "sh", "-c", "echo $HOME" ] #先创建一个新的空.

软件工程小施同学 的专栏 5465

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

nginx docker CMD命令 容器启动不了

nginx dockerfile 配置nginx启动 CMD ["nginx"] ######### 容器启动不了 ######## [hadoop@hadoop03 fastdfs-docker]$ sudo docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d0b4d37f1121 9d24d

qq_15138049的博客 1043

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

k8s 启动命令cmd_为容器设置启动时要执行的命令及其入参

创建 Pod 时,可以为其下的容器设置启动时要执行的命令及其入参。如果要**设置命令**,就填写在配置文件的 command 字段下,如果要设置**命令的入参**,就填写在配置文件的 args 字段下。**一旦 Pod 创建完成,该命令及其入参就无法再进行更改了。**command: ["printenv"]args: ["HOSTNAME", "KUBERNETES_PORT"]这两行可以实现覆...

weixin_39704066的博客 3207

什么是 Dockerfile?Dockerfile格式、FROM-指定基础镜像、RUN-运行指定的命令、CMD-容器启动时要运行的命令、ENTRYPOINT-为容器指定默认运行程序

定义匿名数据卷,可实现挂载功能,可以将内地文件夹或者其他容器中得文件夹挂在到这个容器中。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷。作用:避免重要的数据,因容器重启而丢失,这是非常致命的。(容器使用的是AUFS,这种文件系统不能持久化数据,当容器关闭后,所有的更改都会丢失。避免容器不断变大。语法格式如下:VOLUME [ "" , "" . . . ] VOLUME 在启动容器 docker run 的时候,我们可以通过 - v 参数修改挂载点。

linjun的博客 1277

k8s 启动命令cmd_Kubernetes(k8s)为容器设置启动时要执行的命令和参数

创建 Pod 时设置命令及参数创建 Pod 时,可以为其下的容器设置启动时要执行的命令及其参数。如果要设置命令,就填写在配置文件的 command 字段下,如果要设置命令的参数,就填写在配置文件的 args 字段下。一旦 Pod 创建完成,该命令及其参数就无法再进行更改了。如果在配置文件中设置了容器启动时要执行的命令及其参数,那么容器镜像中自带的命令与参数将会被覆盖而不再执行。如果配置文件中只是设...

weixin_28703451的博客 2977

dockerfile-cmd命令

一.dockerfile运行的命令 CMD:是指定容器启动时默认执行的命令,会被docker run提供的参数覆盖 格式: CMD commandparam1 param2 (shell模式) CMD ["executable","param1","param2"] (exec模式)推荐 ...

junaozun的博客 8219

Docker 命令CMD与ENTRYPOINT 区别

CMD cmd给出的是一个容器的默认的可执行体。也就是容器启动以后,默认的执行的命令。重点就是这个“默认”。意味着,如果不指定启动容器后要执行的命令,那么,就会使用cmd指定的默认的执行命令执行。如果指定了启动容器后要执行的命令,那么就不会再执行cmd中的命令。 那么在哪里可以指定容器启动后要执行的命令呢? docker run可以指定执行命令 dockerfile用entrypoint指...

bocai_xiaodaidai的博客 7448

docker的cmd命令与entrypoint命令详解

cmd: cmd给出的是一个容器的默认的可执行体。也就是容器启动以后,默认的执行的命令。重点就是这个“默认”。意味着,如果docker run没有指定任何的执行命令或者dockerfile里面也没有entrypoint,那么,就会使用cmd指定的默认的执行命令执行。同时也从侧面说明了entrypoint的含义,它才是真正的容器启动以后要执行命令。 总共有三种用法: The CMD instruction has three forms: CMD ["executable","param1","param

qq_21154829的博客 1万+

浅析 Dockerfile 中 RUN、CMD 以及 ENTRYPOINT 指令的异同

RUN、CMD和ENTRYPOINT指令都可以用来执行具体的命令.RUN指令是在Docker镜像构建时发挥作用,可以使用多个该命令,且执行结果会记录到镜像中.CMD和ENTYPOINT指令是在容器启动时自动执行,均只有最后一个该指令有效,且均可以在dockerrun中被覆盖.ENTRYPOINT指令和CMD的区别在于使用ENTRYPOINT时CMD指令会被作为其默认参数,而用户也可以在启动容器时通过覆盖CMD指令来输入参数;此外,这也意味着ENTRYPOINT指令的内容..........

LostUnravel的博客 5471

Linux下Dockerfile文件种CMD命令和ENTRYPOINT命令的区别

一.CMD命令 支持三种格式 CMD["executable","param1","param2"]使用exec执行,推荐方式; CMD["param1","param2"] 可以自己执行,也可以给ENTRYPOINT 提供参数; CMDcommandparam1param2在/bin/sh中执行,提供给需要交互的应用; 用法1: 带有中括...

qq_42303254的博客 1097

Docker CMD(命令)和 ARGS(参数)使用整理

Docker CMD(命令)和 ARGS(参数)使用整理 总览 K8S集群创建Pod时,可以为其下的容器设置启动时要执行的命令及其参数。设置命令,就填写在配置文件的command字段下,如果要设置命令的参数,就填写在配置文件的args字段下。一旦Pod创建完成,该命令及其入参无法再进行更改。 配置文件中设置了容器启动时要执行的命令及其参数,那么容器镜像中自带的命令 与参数将会被覆盖而不再执行。如果...

无锋剑 3224

docker CMD 命令

我们知道,通过docker run 创建并启动一个容器时,命令的最后可以指定容器启动后在容器内立即要执行的指令,如: docker run -i -t ubunu /bin/bash   //表示容器启动时立即在容器内打开一个shell终端 docker run ubuntu /bin/ps    //表示容器启动后立即运行 /bin/ps命令,显示容器的当前进程。 除了这种方式外,我们可以...

thedarkclouds的博客 1万+
上一篇: 让终端 sudo 时用上 Touch ID
下一篇: alfred 常用配置
THMAIL
博客等级 码龄10年 2434粉丝 432原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值