设置容器启动命令
操作场景
创建工作负载或任务时,通常通过镜像指定容器中运行的进程。
在默认情况下,镜像会运行默认命令,如果想运行特定命令或重写镜像默认值,需要用到以下设置:
- 工作目录:指定运行命令的工作目录。
若镜像中未指定工作目录,且在界面中也未指定,默认是“/”。
- 运行命令:控制镜像运行的实际命令。
- 运行参数:传递给运行命令的参数。

容器启动后,容器中的内容不应修改。如果修改配置项(例如将容器应用的密码、证书、环境变量配置到容器中),当容器重启(例如节点异常重新调度pod)后,会导致配置丢失,业务异常。
配置信息应通过入参等方式导入容器中,以免重启后配置丢失。
容器如何执行命令和参数
Docker 的镜像拥有存储镜像信息的相关元数据,如果不设置生命周期命令和参数,容器运行时会运行镜像制作时提供的默认的命令和参数,Docker 原生定义这两个字段为 “ Entrypoint ” 和 " CMD "。
如果在创建工作负载时填写了容器的运行命令和参数,将会覆盖镜像构建时的默认命令 " Entrypoint "、" CMD ",规则如下:
镜像 Entrypoint |
镜像CMD |
容器运行命令 |
容器运行参数 |
最终执行 |
---|---|---|---|---|
[touch] |
[/root/test] |
未设置 |
未设置 |
[touch /root/test] |
[touch] |
[/root/test] |
[mkdir] |
未设置 |
[mkdir] |
[touch] |
[/root/test] |
未设置 |
[/opt/test] |
[touch /opt/test] |
[touch] |
[/root/test] |
[mkdir] |
[/opt/test] |
[mkdir /opt/test] |
设置启动命令
- 登录CCE控制台,在创建工作负载或任务时,展开“生命周期”。
- 在启动命令后,输入运行命令和运行参数,如表2。
- 当前启动命令以字符串数组形式提供,对应于Docker的Entrypoint启动命令,格式为: ["executable", "param1", "param2",..]。Kubernetes的容器启动命令可参见这里。
- 容器的生命周期与启动命令的生命周期一致,即启动命令执行完成后容器的生命周期结束。
表2 容器启动命令 命令方式
操作步骤
运行命令
输入可执行的命令,例如“/run/server”。
若运行命令有多个,多个命令之间用空格进行分隔。若命令本身带空格,则需要加引号("")。
说明:多命令时,运行命令建议用/bin/sh或其他的shell,其他全部命令作为参数来传入,如图1。
运行参数
输入控制容器运行命令参数,例如--port=8080。
若参数有多个,多个参数以换行分隔。
下面将以启动一个nginx为例,介绍容器启动命令典型的三个使用场景:
示例代码如下:nginx -c nginx.conf
- 场景一:容器的“运行命令”和“运行参数”均作设置,界面截图如下:图2 运行命令和运行参数均设置
所生成的YAML样例如下:
command: - nginx args: - '-c' - nginx.conf
- 场景二:仅设置容器的“运行命令”,界面截图如下:图3 仅设置运行命令
运行命令中前后要加英文双引号"",若不加则会按照空格将命令拆分成多条执行。
所生成的YAML样例如下:
command: - nginx -c nginx.conf args:
- 场景三:仅设置容器的“运行参数”,界面截图如下:图4 仅设置运行参数
如果运行命令没有添加到系统路径中,可以使用/bin/sh来执行命令,命令需要加英文双引号""。
所生成的YAML样例如下:
command: - /bin/sh args: - '-c' - '"nginx -c nginx.conf"'
- 您可以通过如下方式检查或修改YAML:
- 创建工作负载时,在“高级设置”步骤中,单击右侧的“YAML创建”。图5 检查/修改YAML
- 工作负载创建完成后,在工作负载列表中,单击工作负载名称后的“更多 > 编辑YAML”。图6 编辑YAML
- 工作负载创建完成后,进入工作负载详情页面,单击右上角的“编辑YAML”。图7 详情页-编辑YAML
- 创建工作负载时,在“高级设置”步骤中,单击右侧的“YAML创建”。
设置容器启动命令-YAML样例
本节以nginx为例,说明通过kubectl设置容器启动命令的方法。
前提条件
请参见通过kubectl或web-terminal插件连接CCE集群配置kubectl命令,使弹性云服务器连接集群。
操作步骤
参见通过kubectl命令行创建无状态工作负载或通过kubectl命令行创建有状态工作负载时,容器启动命令的参数设置如下所示,详细请参见kubernetes官方文档。
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: nginx spec: replicas: 1 selector: matchLabels: app: nginx strategy: type: RollingUpdate template: metadata: labels: app: nginx spec: containers: - image: nginx command: - sleep - '3600' #启动命令 imagePullPolicy: Always lifecycle: postStart: exec: command: - /bin/bash - install.sh #启动后命令 preStop: exec: command: - /bin/bash - uninstall.sh #停止前命令 name: nginx imagePullSecrets: - name: default-secret
