我有一個Dockerfile將安裝程序複製到容器中,並且在Dockerfile中指定的默認命令是/usr/sbin/init
,因爲我需要運行某些服務。通過kubectl create -f server-rc.yml
命令創建容器後,我將以交互模式運行kubectl exec命令以運行該安裝程序,並通過node.js腳本自動提供輸入,命令如下所示(運行安裝程序並通過stdin自動提供輸入),它開始我的自定義服務的豆莢。註冊kubectl exec命令,同時創建新的Pod創建
一切都很好,直到現在。現在讓我們說出2個豆莢,一個豆莢死亡,一個新豆莢產生。現在,我如何確保最初在Pod上運行的這些交互式命令也可以在新生成的Pod上運行?我不確定在規範中使用command
和args
是否會工作,因爲它們都以非交互模式工作。任何想法如何解決這個問題將不勝感激。
編輯:
Dockerfile(部分代碼):
FROM centos:7
ENV container docker
RUN yum -y update; yum clean all
VOLUME [ 「/sys/fs/cgroup」 ]
RUN yum -y install nodejs npm && npm install progress
RUN mkdir -p /tmp
COPY ./install.js /tmp
COPY ./test.bin /tmp/
CMD ["/usr/sbin/init"]
Node.js的腳本通過child_process.spawn
開闢了test.bin
然後偵聽process.stdout.on
和基於什麼標準輸出上收到的,提供通過process.stdin.write
輸入。
謝謝。
init容器(https://kubernetes.io/docs/concepts/workloads/pods/init-containers/)會有幫助嗎? (將節點應用程序安裝在卷中,然後由容器裝入) – VonC
您可以將輸入值添加到configmap中,並將configmap作爲文件掛載到您的容器中。這將刪除交互部分 – sfgroups