首页 > 解决方案 > PostStarthook 以 126 退出

问题描述

我需要将位置 B 中已经存在的一些配置文件复制到位置 A,在该位置我已在同一容器中安装了持久卷。为此,我尝试如下配置启动后挂钩

    lifecycle:
      postStart:
        exec:
          command:
            - "sh"
            - "-c"
            - >
              if [! -d "/opt/A/data" ] ; then
                cp -rp /opt/B/. /opt/A;
              fi;
              rm -rf /opt/B

但它以 126 退出 请提供任何提示

标签: shellkuberneteshooklifecycle

解决方案


您应该在第一个括号后留一个空格[。以下Deployment作品:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80
        lifecycle:
          postStart:
            exec:
              command:
                - "sh"
                - "-c"
                - >
                  if [ ! -d "/suren" ] ; then
                    cp -rp /docker-entrypoint.sh /home/;
                  fi;
                  rm -rf /docker-entrypoint.sh

因此,这个 nginx 容器docker-entrypoint.sh默认以脚本启动。容器启动后,找不到目录suren,这将给语句,它将脚本复制到true目录并从根目录中删除脚本。if/home

# kubectl exec nginx-8d7cc6747-5nvwk 2> /dev/null -- ls /home/
docker-entrypoint.sh

推荐阅读