docker - 在 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
图像。
解决方案
首先,我建议使用:
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-1
Pod 中:
$ 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
正如您在上面的示例中所看到的,一切都按预期工作。
推荐阅读
- deep-learning - 测量音频质量和吸引力/美感
- python - spaCy 匹配器无法识别除第一个之外的模式
- python - 比较两个列表列表并在python中获得部分/完整匹配
- c# - 使用 TypeBuilder 生成将自身置于构造函数中的构造函数
- jquery - Rails 将“json”格式的 Ajax 请求视为“text/html”
- reactjs - 在reducer 成功请求后,我正在寻找类型错误的原因
- sql-server - 创建 TVP 函数时必须声明表变量错误
- codeigniter - 日期选择器不适用于其他记录的模式形式,除了第一个
- rust - 不安全指定生命周期的例子有哪些?
- excel - 根据唯一的行值搜索和更新列数据,如果新值则更新为最后一行 VBA