我有一个docker compose文件,其中包含2个容器,在第二个容器开始之前,完成第一个容器是必不可少的。
如果我运行以下docker命令:
docker run -v /opt/kubearmor/BPF:/opt/kubearmor/BPF --privileged kubearmor/kubearmor-init:stable
它将编译当前内核的bpf代码,并将文件输出为
/opt/kubearmor/BPF/system_monitor.bpf.o
。然后第二个容器将使用此文件。
如果在向添加了必要的读/写权限后运行上述docker命令
/opt/kubearmor/
目录中,它成功运行并输出文件。
但如果我将其作为以下内容的一部分运行
docker-compose.yaml
文件,第一个容器无法创建
system_monitor.bpf.o
所需目录中的文件。
docker-compose.yaml
services:
kubearmor-init:
image: kubearmor/kubearmor-init:stable
privileged: true
volumes:
- /opt/kubearmor/BPF:/opt/kubearmor/BPF
entrypoint: ["/bin/sh", "-c", "echo 'Init container done' && sleep 10"]
kubearmor:
image: kubearmor/kubearmor:latest
command: ["-k8s=false"]
depends_on:
kubearmor-init:
condition: service_completed_successfully
privileged: true
pid: "host"
ipc: "host"
network_mode: "host"
volumes:
- /opt/kubearmor/BPF:/opt/kubearmor/BPF
- /sys/fs/bpf:/sys/fs/bpf
- /sys/kernel/security:/sys/kernel/security
- /sys/kernel/debug:/sys/kernel/debug
- /var/run/containerd/containerd.sock:/var/run/containerd/containerd.sock
- /run/containerd:/run/containerd
- /var/lib/docker:/var/lib/docker
结果,第二个容器给出错误:
kubearmor-1 | 2024-05-20 15:18:52.494014 ERROR Failed to initialize BPF (cannot load bpf module specs open /opt/kubearmor/BPF/system_monitor.bpf.o: no such file or directory)
我尝试授予对的完全读/写访问权限
opt/kubearmor/BPF
目录,但它适用于单机版
docker
仅用于命令,不用于
docker-compose
方法