container中的command的使用

Posted yanh0606

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了container中的command的使用相关的知识,希望对你有一定的参考价值。

前面说了init容器initContainers,这主要是为应用容器做前期准备工作的,一般都会用到shell脚本,这就会用到command,这里写写command的用法。

      command就是将命令在创建的容器中执行,有这些命令去完成一些工作,command用法和dockerfile中的cmd差不多, command可以单独写,也可以分成command和参数args,可以参考之前的CMD去理解,例如下面的写法都可以。

command: [/bin/sh]


command:  ["rm", "-fr", "/var/lib/dbs/lost+found"]


command:
- sh
- -c
- DATA_SOURCE_NAME="root@(localhost:3306)/" /bin/mysqld_exporter


command: ["sh", "-c", "until nslookup myservice; do echo waiting for myservice; sleep 2; done;"]


command: ["sh"]
args: ["-c","until nslookup myservice; do echo waiting for myservice; sleep 2; done;"]


          livenessProbe:
            exec:
              command:
              - /bin/sh
              - -c
              - wget -O - -q --header "Authorization: Basic `echo -n \"$RABBIT_MANAGEMENT_USER:$RABBIT_MANAGEMENT_PASSWORD\" | base64`" http://localhost:15672/api/healthchecks/node | grep -qF "\"status\":\"ok\""
            initialDelaySeconds:  .Values.livenessProbe.initialDelaySeconds 
            periodSeconds:  .Values.livenessProbe.periodSeconds 

 

另外args还有一种写法,可以理解成args后面是一个.sh文件,command来直接执行一个脚本文件,可以写相对复杂的脚本。

        command: [sh]
        args:
        - "-c"
        - |
          set -ex
          if [ ! -d "/opt/ShenTong/odbs/OSRDB" ];then
            mkdir /opt/ShenTong/odbs/
            cp -r /opt/OSRDB /opt/ShenTong/odbs/
          else
            echo "数据库文件已存在"
          fi

 

最后贴一个官方写的一个rabbitmq的完整例子

    spec:
      - if .Values.image.pullSecrets 
      imagePullSecrets:
      - range .Values.image.pullSecrets 
        - name:  . 
      - end 
      - end 
      terminationGracePeriodSeconds:  .Values.terminationGracePeriodSeconds 
      securityContext:
 toYaml .Values.securityContext | indent 10 
      serviceAccountName:  template "rabbitmq-ha.serviceAccountName" . 
      initContainers:
        - name: bootstrap
          image:  .Values.registry  .Values.busyboxImage.repository .Values.arch : .Values.busyboxImage.tag
          imagePullPolicy:  .Values.busyboxImage.pullPolicy 
          command: [sh]
          args:
          - "-c"
          - |
            set -ex
            cp /configmap/* /etc/rabbitmq
            rm -f /var/lib/rabbitmq/.erlang.cookie
            - if .Values.forceBoot 
            if [ -d "$RABBITMQ_MNESIA_DIR" ]; then
              touch "$RABBITMQ_MNESIA_DIR/force_load"
            fi
            - end 
          env:
          - name: POD_NAME
            valueFrom:
              fieldRef:
                apiVersion: v1
                fieldPath: metadata.name
          - name: RABBITMQ_MNESIA_DIR
            value: /var/lib/rabbitmq/mnesia/rabbit@$(POD_NAME). template "rabbitmq-ha.fullname" . -discovery. .Release.Namespace .svc. .Values.clusterDomain 
          resources:
 toYaml .Values.initContainer.resources | indent 12 
          volumeMounts:
            - name: configmap
              mountPath: /configmap
            - name: config
              mountPath: /etc/rabbitmq
            - name:  .Values.persistence.name 
              mountPath: /var/lib/rabbitmq

 

以上是关于container中的command的使用的主要内容,如果未能解决你的问题,请参考以下文章

侵入式单链表的简单实现(cont)

aws.push 命令未运行 .config 命令或 container_commands

oozie的shell-action中加入hive脚本命令启动执行shell同时操作hive,抛异常Container killed on request. Exit code is 143 Cont

在 .ebsextension 文件夹上运行 container_commands

[Docker] Run a command inside Docker container

2Learn about images & containers