gpt4 book ai didi

docker - 如何在接受命令行参数的 kubernetes 上运行 docker 镜像?

转载 作者:行者123 更新时间:2023-12-02 21:11:22 28 4
gpt4 key购买 nike

我有一个 docker 镜像,其中包含一个 python 文件,该文件使用 sys.stdin() 从命令行接受参数。我可以使用以下命令运行图像

cat file.csv | docker run -i -t my_image



它将 file.csv 的内容通过管道传输到图像,我得到了预期的输出。

现在我想将此镜像部署到 kubernetes。我可以使用 docker 在服务器上运行图像而没有任何问题。但是如果我 curl 到它,它应该会发回响应,但我没有收到它,因为我没有在任何端口上监听的 Web 服务器。我继续使用以下命令构建了一个部署。

kubectl run -i my_deployment --image=gcr.io/${PROJECT_ID}/my_image:v1 --port 8080



它构建了部署,我可以看到 Pod 正在运行。然后我暴露它。

kubectl expose deployment my_deployment --type=LoadBalancer --port 80 --target-port 8080



但是如果我尝试使用使用 curl 分配的 IP 来访问它,

curl http://allocated_ip



我得到一个响应“连接被拒绝”。

如何将此 docker 镜像部署为 kubernetes 上的服务并将文件内容作为输入发送到服务?我需要一个网络服务器吗?

最佳答案

Kubernetes 通常假设它部署的容器是长生命周期和自治的。如果您在 Pod 中部署某些东西,尤其是通过 Deployment,它应该能够在没有任何特定输入的情况下自行运行。如果它立即退出,Kubernetes 将重新启动它,你很快就会陷入可怕的 CrashLoopBackOff状态。

简而言之:您需要重新设计容器以不使用标准输入,标准输出是它的主要接口(interface)。

您将网络端点添加到服务中的直觉可能是正确的,但 Kubernetes 不会自己这样做。如果你重建你的应用程序以拥有一个 Flask 服务器并监听一个端口,那么你可以很容易地将它部署到 Kubernetes。如果应用程序希望数据进入标准输入并且其结果进入标准输出,那么添加 Kubernetes 网络元数据将无济于事:在您的示例中,如果容器内没有任何东西在端口 8080 上监听,那么网络连接将永远不会去任何地方.

关于docker - 如何在接受命令行参数的 kubernetes 上运行 docker 镜像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54424063/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com