文档首页 > > 用户指南> 工作负载> 容器设置> 设置容器启动命令

设置容器启动命令

分享
更新时间: 2020/06/23 GMT+08:00

创建工作负载或任务时,通常通过镜像指定容器中运行的进程。

在默认情况下,镜像会运行默认命令,如果想运行特定命令或重写镜像默认值,需要用到以下设置:

  • 工作目录:指定运行命令的工作目录。

    若镜像中未指定工作目录,且在界面中也未指定,默认是“/”。

  • 运行命令控制镜像运行的实际命令。
  • 运行参数传递给运行命令的参数。

容器启动后,容器中的内容不应修改。如果修改配置项(例如将容器应用的密码、证书、环境变量配置到容器中),当容器重启(例如节点异常重新调度pod)后,会导致配置丢失,业务异常。

配置信息应通过入参等方式导入容器中,以免重启后配置丢失。

容器如何执行命令和参数

Docker 的镜像拥有存储镜像信息的相关元数据,如果不设置生命周期命令和参数,容器运行时会运行镜像制作时提供的默认的命令和参数,Docker 原生定义这两个字段为 “ Entrypoint ” 和 " CMD "。详情可查看 docker的 Entrypoint 说明CMD 说明

如果在创建工作负载时填写了容器的运行命令和参数,将会覆盖镜像构建时的默认命令 " Entrypoint "、" CMD ",规则如下:

表1 容器如何执行命令和参数

镜像 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]

设置启动命令

  1. 登录CCE控制台,在创建工作负载或任务时,展开“生命周期”
  2. 在启动命令后,输入运行命令和运行参数,如表2

    • 当前启动命令以字符串数组形式提供,对应于Docker的Entrypoint启动命令,格式为: ["executable", "param1", "param2",..]。Kubernetes的容器启动命令可参见这里
    • 容器的生命周期与启动命令的生命周期一致,即启动命令执行完成后容器的生命周期结束。
    表2 容器启动命令

    命令方式

    操作步骤

    运行命令

    输入可执行的命令,例如“/run/server”

    若运行命令有多个,多个命令之间用空格进行分隔。若命令本身带空格,则需要加引号("")。

    说明:

    多命令时,运行命令建议用/bin/sh或其他的shell,其他全部命令作为参数来传入,如图1

    运行参数

    输入控制容器运行命令参数,例如--port=8080。

    若参数有多个,多个参数以换行分隔。

    图1 启动命令示例

    下面将以启动一个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"'

  3. 您可以通过如下方式检查或修改YAML:

    • 创建工作负载时,在“高级设置”步骤中,单击右侧的“YAML创建”
      图5 检查/修改YAML
    • 工作负载创建完成后,在工作负载列表中,单击工作负载名称后的“更多 > 编辑YAML”
      图6 编辑YAML
    • 工作负载创建完成后,进入工作负载详情页面,单击右上角的“编辑YAML”
      图7 详情页-编辑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
分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

智能客服提问云社区提问