![](/img/trans.png)
[英]How to properly create sidecar container for creating SSH tunnel in kubernetes pod
[英]Restart only sidecar container in Kubernetes
我的 POD 中有兩個容器。 第一個容器是我的主要應用程序,第二個用作具有以下 Dockerfile 的以下圖像的 sidecar 容器。
FROM scratch
EXPOSE 8080
ADD my-binary /
ENV GOROOT=/usr/lib/go
ENTRYPOINT ["/my-binary"]
基本上它使用scratch,而my-binary 是一個作為進程運行的go 應用程序。 所以我不能EXEC在這一側汽車集裝箱。 我需要重新啟動側容器(my-binary),但主容器應該沒有變化。 不應以任何方式更改主容器。
有沒有可能,我怎么能做到這一點?
非常感謝您調查此事。
有人要求提供POD的完整細節,那么你可以考慮下面的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
這不適用於第二個容器,因為它是臨時映像。
因此,由於使用scatch
作為基本映像,您的reboot
命令不起作用(當然它會更新工作)。
此映像在構建基本映像(例如debian和busybox )或超小型映像(僅包含單個二進制文件和它需要的任何內容,例如 hello-world )的上下文中最有用。
見, https://hub.docker.com/_/scratch
該基地圖像
scratch
是碼頭工人的保留最少的圖像。 它可以作為構建小型容器的起點。 使用scratch
“鏡像”向構建過程發出信號,表明您希望 Dockerfile 中的下一個命令成為鏡像中的第一個文件系統層。
參考: https : //docs.docker.com/develop/develop-images/baseimages/#create-a-simple-parent-image-using-scratch
從您提供的 dockerfile 來看,唯一的文件系統是您的 go-binery。 除此以外別無他物。 這就是你不能(不能)運行reboot
命令的原因。 如果您更改了基本映像,例如busybox
或alpine
或其他任何東西,您將能夠運行reboot
命令。
但請記住,您的新基礎映像必須具有合適的 shell 才能運行您預期的命令。 例如,
busybox
映像具有 shell (bash
),因此可以運行reboot
命令。alpine
圖像也有外殼(sh
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.