我有一个部署,可以根据需要创建pod,并在其上安装图像和卷。
我必须在pod中执行一个命令来启动服务,但只有在节点运行时(因此我没有在docker镜像中执行此操作)。
如何从外部在pod中运行命令(例如,我可以从集群外部运行的.sh文件,它将执行进入pod并运行命令?)
更新:我发现使用yaml中的mono /opt/foo/bar.exe -nogui
标头可以覆盖Dockerfile中的command:
。
见here
我的新问题是我不知道哪个是第一个;正在安装的卷或正在运行的命令(我假设后者)。在运行命令之前,我需要从卷中获取一些内容。任何建议将不胜感激。
答案 0 :(得分:3)
对于最初的问题,以下内容可行:
kubectl exec -it pod --namespace=namespace cat /etc/hosts
显然更改了pod名称,命名空间和命令。
关于您的更新,首先创建卷,我知道通过挂载mongo容器的持久存储,然后在启动时mongo入口点将数据写入此位置。
答案 1 :(得分:3)
$ kubectl exec --help
Execute a command in a container.
Options:
-c, --container='': Container name. If omitted, the first container in the pod will be chosen
-p, --pod='': Pod name
-i, --stdin=false: Pass stdin to the container
-t, --tty=false: Stdin is a TTY
Usage:
kubectl exec POD [-c CONTAINER] -- COMMAND [args...] [options]
如果您的Pod中有多个容器,则需要指定容器名称,否则,您将执行第一个容器。
kubectl exec -it -n <namespace-name> <pod-name> -c <container-name> -- COMMAND [args...]
阅读有关kubectl exec
的详细信息