从外部执行pod内的命令

时间:2018-02-13 11:14:59

标签: kubernetes

我有一个部署,可以根据需要创建pod,并在其上安装图像和卷。

我必须在pod中执行一个命令来启动服务,但只有在节点运行时(因此我没有在docker镜像中执行此操作)。

如何从外部在pod中运行命令(例如,我可以从集群外部运行的.sh文件,它将执行进入pod并运行命令?)

更新:我发现使用yaml中的mono /opt/foo/bar.exe -nogui标头可以覆盖Dockerfile中的command:。 见here

我的新问题是我不知道哪个是第一个;正在安装的卷或正在运行的命令(我假设后者)。在运行命令之前,我需要从卷中获取一些内容。任何建议将不胜感激。

2 个答案:

答案 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]


增加Alex's answer

如果您的Pod中有多个容器,则需要指定容器名称,否则,您将执行第一个容器。

kubectl exec -it -n <namespace-name> <pod-name> -c <container-name> -- COMMAND [args...]

阅读有关kubectl exec

的详细信息