首页 > 解决方案 > 在 kubernetes 上的 alpine docker 中克隆 repo 和移动文件时出现“目录或文件不存在”

问题描述

我正在尝试初始化我的容器,但directory or file does not exist在以下脚本中不断出现错误。我基本上需要将配置文件从 repo 获取到文件夹中。

我不是通过放置确切的文件来寻找替代解决方案,我需要这是针对任意数量文件的解决方案。

查看 alpine docker,该/usr/share文件夹应该存在。

这是initContainer使用的:

      initContainers:
        - name: init-config
          image: alpine/git
          command:
            - "git clone https://github.com/coolacid/docker-misp.git /usr/repo && cp -a /usr/repo/docker-misp/server-configs/ /usr/share"
          volumeMounts:
            - mountPath: /usr/share
              name: misp-app-config

如何正确地将文件移动到卷中?

编辑1:我正在使用alpine/git图像。

标签: dockerkubernetesalpinerancherpersistent-volumes

解决方案


首先,我建议使用:

command: ["/bin/sh","-c"]
args: ["git clone https://github.com/coolacid/docker-misp.git /usr/repo && cp -a /usr/repo/server-configs/ /usr/share"]

代替:

command:
            - "git clone https://github.com/coolacid/docker-misp.git /usr/repo && cp -a /usr/repo/docker-misp/server-configs/ /usr/share"
        

此外,您不应指定docker-misp目录,因为docker-misp.git存储库的所有内容都已克隆到/usr/repo

# git clone https://github.com/coolacid/docker-misp.git /usr/repo
Cloning into '/usr/repo'...
remote: Enumerating objects: 905, done.
remote: Counting objects: 100% (160/160), done.
remote: Compressing objects: 100% (24/24), done.
remote: Total 905 (delta 144), reused 136 (delta 136), pack-reused 745
Receiving objects: 100% (905/905), 152.64 KiB | 2.50 MiB/s, done.
Resolving deltas: 100% (444/444), done.

# ls /usr/repo
LICENSE  README.md  build-docker-compose.yml  docker-compose.yml  examples  modules  server  server-configs

我准备了一个示例来说明它是如何工作的:
注意:我使用了 emptyDir但您可能想使用不同类型的卷

$ cat app-1.yml
apiVersion: v1
kind: Pod
metadata:
  labels:
    run: app-1
  name: app-1
spec:
  initContainers:
    - name: init-config
      image: alpine/git
      command: ["/bin/sh","-c"]
      args: ["git clone https://github.com/coolacid/docker-misp.git /usr/repo && cp -a /usr/repo/server-configs/ /usr/share"]
      volumeMounts:
        - mountPath: /usr/share
          name: misp-app-config
  containers:
  - image: nginx
    name: web-1
    volumeMounts:
    - mountPath: "/work-dir"
      name: misp-app-config
  volumes:
  - name: misp-app-config
    emptyDir: {}
    
$ kubectl apply -f app-1.yml
pod/app-1 created

$ kubectl get pods
NAME    READY   STATUS    RESTARTS   AGE
app-1   1/1     Running   0          11s

我们可以检查server-configs目录是否已经复制到web-1Pod 中:

$ kubectl exec -it app-1 -- sh
Defaulted container "web-1" out of: web-1, init-config (init)
# ls /work-dir
server-configs
# ls /work-dir/server-configs
email.php

正如您在上面的示例中所看到的,一切都按预期工作。


推荐阅读