我的POD中有两个容器。第一个容器是我的主要应用程序,第二个用作具有以下镜像且具有以下Dockerfile的Sidecar容器。
FROM scratch
EXPOSE 8080
ADD my-binary /
ENV GOROOT=/usr/lib/go
ENTRYPOINT ["/my-binary"]
基本上,它使用 scratch ,而my-binary是一个go应用程序,它作为进程运行。因此,我不能执行这个侧面的汽车集装箱。我需要重新启动辅助容器(my-binary),但是主容器中应该没有任何更改。主容器不得以任何方式更改。
有没有可能,我该如何实现?
非常感谢您对此进行调查。
有人要求提供POD的完整详细信息,然后您可以考虑采用以下吊舱结构
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
labels:
app: my-deploy
spec:
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: main
image: my-main-app-image
ports:
- containerPort: 80
- name: my-go-binary
image: my-go-binary-image
请注意-
kubectl exec POD_NAME -c CONTAINER_NAME reboot
这不适用于第二个容器,因为它是临时图像。
答案 0 :(得分:0)
因此,您使用reboot
作为基本映像的scatch
命令无效(当然,它将更新)。
此图像在构建基础图像(例如debian和busybox)或超小型图像(仅包含单个二进制文件以及所需内容,例如hello-世界)。
请参见https://hub.docker.com/_/scratch
基本映像
scratch
是Docker保留的最小映像。它可以作为构建小型容器的起点。使用scratch
“映像”向构建过程发出信号,表示您希望Dockerfile中的下一个命令成为映像中的第一个文件系统层。
从您提供的dockerfile中,唯一的文件系统是go-binery。除此以外没有别的。这就是为什么您不能(无法)运行reboot
命令的原因。如果您更改基本图像,例如busybox
或alpine
或其他任何内容,则可以运行reboot
命令。
但是请记住,新的基本映像必须具有正确的外壳程序才能运行预期的命令。例如,
busybox
图像具有外壳(bash
),因此可以运行reboot
命令。并且alpine
图像也具有外壳(sh
)。