我怎样才能让容器在Kubernetes上运行?
我现在试图在Kubernetes集群上运行一个带有shell(/ bin / bash)的简单容器。
我认为有一种方法可以通过使用伪tty和分离选项( -td
docker run
命令中的-td
选项)来保持容器在Docker容器上docker run
。
例如
$ sudo docker run -td ubuntu:latest
在kubernetes中有这样的select吗?
我已经尝试使用kubectl run-container
命令kubectl run-container
kubectl run-container test_container ubuntu:latest --replicas=1
但容器会在几秒钟内退出(就像使用docker run
命令启动,而不是前面提到的选项),而ReplicationController会再次启动它。
在Docker docker run
命令中,是否有任何方法让容器在Kubernetes上运行,如-td选项?
当主进程退出时,容器退出。 做的事情如:
docker run -itd debian
坦白地说,容器是一个黑客,只能用于快速testing和例子。 如果你只是想要一个容器来testing几分钟,我会这样做:
docker run -d debian sleep 300
这有一个好处,容器会自动退出,如果你忘记了。 或者,你可以在while
循环中放置这样的东西while
以保持它永远运行,或者只运行一个应用程序,如top
。 所有这些在Kubernetes中都应该很容易做到。
真正的问题是你为什么要这样做? 您的容器应提供服务,其进程将保持容器在后台运行。
你可以在你的Dockerfile
使用这个CMD:
CMD exec /bin/bash -c "trap : TERM INT; sleep infinity & wait"
这将保持你的容器活着,直到它被告知停止。 使用陷阱和等待将使您的容器立即响应停止请求 。 没有陷阱/等待停止将需要几秒钟。
集装箱的运行是为了完成。 你需要为你的容器提供一个永远不会完成的任务。 像这样的东西应该工作:
apiVersion: v1 kind: Pod metadata: name: ubuntu spec: containers: - name: ubuntu image: ubuntu:latest # Just spin & wait forever command: [ "/bin/bash", "-c", "--" ] args: [ "while true; do sleep 30; done;" ]
我能够得到这个工作与kubernetes命令sleep infinity
,这将保持打开容器。 看到这个答案的替代品,当不起作用。
-
在你的Dockerfile中使用这个命令:
CMD ["sh", "-c", "tail -f /dev/null"]
-
build立你的docker形象。
- 将它推送到群集或类似的地方,只是为了确保它可用的图像。
-
kubectl run debug-container -it --image=<your-image>
在我的情况下,initContainer的pod无法初始化。 运行docker ps -a
,然后docker logs exited-container-id-here
给了我一个日志消息,其中kubectl logs podname
没有显示。 谜团已揭开 :-)
- Neo4j – 如何使用Docker镜像从安全连接访问螺栓?
- Google容器引擎:创build容器后,Kubernetes不公开外部IP
- 如何使用gcloud或其他CLI在Google Container Registry中列出已发布的容器图像
- 在Kubernetes上的分期和生产
- 从BigQuery获取(stream)数据到R(Docker中的Rstudio服务器)的最佳方式是什么?
- kubernetes部署。 如何更改滚动更新的容器环境variables?
- 在Kubernetes或Google Container Engine中等待作业/ Pod完成
- Google容器引擎公开服务“网站无法访问”
- Kubernetes:当每个吊舱暴露一个端口时,节点中的多个吊舱