首页 > 编程问答 >即使使用 docker run -dit 命令,python-Docker 容器也会在运行两秒后退出

即使使用 docker run -dit 命令,python-Docker 容器也会在运行两秒后退出

时间:2024-07-30 08:19:15浏览次数:10  
标签:python docker kubernetes

我想从 此处 使用 Dockerfile 测试自定义 kubernetes 调度程序:

FROM python:3.7
RUN pip install kubernetes
COPY scheduler.py /scheduler.py
CMD python /scheduler.py

一旦创建了映像和容器:

docker build -t app . 
docker container run -d -it --name my-scheduler app:latest

容器立即进入 退出 状态。 首先我假设容器内的进程已经结束,因为它还没有在 kubernetes 集群中运行。 所以我创建了 deployment.yaml 并运行:

kubectl create -f deployment.yaml

然后检查:

kubectl get po -A

正如你所看到的,pod还没有准备好:

NAMESPACE     NAME                               READY   STATUS         RESTARTS      AGE

kube-system   etcd-minikube                      1/1     Running        0             119s
kube-system   kube-apiserver-minikube            1/1     Running        0             119s
kube-system   kube-controller-manager-minikube   1/1     Running        0             119s
kube-system   kube-proxy-8c7l5                   1/1     Running        0             107s
kube-system   kube-scheduler-minikube            1/1     Running        0             119s
kube-system   my-scheduler-5f964589d7-pgg74      0/1     ErrImagePull   0             6s
kube-system   storage-provisioner                1/1     Running        1 (85s ago)   116s

我知道stackoverflow中有很多类似的问题和答案我尝试了其中一些对本案没有帮助的方法。


问题在于的 Dockerfile 中缺少 CMD ENTRYPOINT 指令来使容器保持运行状态。虽然在 Dockerfile 中定义了 CMD ,但在 docker container run 命令中使用 -it 标志(代表 --interactive --tty )会覆盖此默认命令。

以下步骤将帮助解决此问题:

1. 更新 Dockerfile:

需要确保进程在容器内运行。一种常见的方法是使用无限循环,直到进程被明确终止。可以使用 tail -f /dev/null 在 Dockerfile 中实现此目的。

FROM python:3.7
RUN pip install kubernetes
COPY scheduler.py /scheduler.py
CMD ["python", "/scheduler.py"]  # 使用 exec 格式,更可靠
# 在调度程序运行后,使用 tail 保持容器运行
CMD ["tail", "-f", "/dev/null"] 

2. 构建并运行容器:

使用以下命令构建并运行容器:

docker build -t app . 
docker container run -d --name my-scheduler app:latest 

请注意,我们删除了 -it 标志,以避免覆盖 Dockerfile 中定义的 CMD

3. 验证容器是否正在运行:

docker ps

应该看到 my-scheduler 容器处于运行状态。

4. 部署到 Kubernetes:

现在,的容器应该能够成功部署到 Kubernetes。确保的 deployment.yaml 文件正确配置,并使用以下命令创建或更新部署:

kubectl apply -f deployment.yaml

其他建议:

  • 确保的 scheduler.py 脚本没有错误,并且在 Kubernetes 集群中运行时不会立即退出。
  • 使用 kubectl describe pod <pod-name> 获取有关 Pod 未就绪状态的更多信息,例如,查看事件和日志。
  • 如果仍然遇到问题,请提供以下信息:
    • scheduler.py 脚本的内容
    • deployment.yaml 文件的内容
    • 运行的 Kubernetes 集群类型(例如,minikube、GKE、AKS)
    • 任何错误消息或日志

通过按照上述步骤操作,应该能够解决容器立即退出问题,并成功在 Kubernetes 中运行的自定义调度程序。

标签:python,docker,kubernetes
From: 74929004

相关文章

  • Python多重处理,如何避免创建具有百万个对象的元组
    python多处理新手。我有一项任务,涉及访问网络服务数百万次并将响应保存在文件中(每个请求都有单独的文件)。我已经得到了高级工作代码,但对一些事情没有感到困惑。以下两种语法有什么区别?pool=Pool(processes=4)pool.starmap(task,listOfInputParametersTu......
  • Python OpenCV - 显示坏像素检查测试
    我想找到显示器中存在的每个坏像素。坏像素可能是颜色不正确的像素,或者像素只是黑色。显示屏的尺寸为160x320像素。所以如果显示效果好的话,必须有160*320=51200像素。如果显示器没有51200像素,那就是坏的。另外,我想知道每个坏像素的位置。一旦拍摄的图像太大,我将共享一个......
  • 在python日志输出的每一行前面添加变量缩进
    我正在将日志记录构建到一个Python应用程序中,我希望它是人类可读的。目前,调试日志记录了调用的每个函数以及参数和返回值。这意味着,实际上,嵌套函数调用的调试日志可能如下所示:2024-07-2916:52:26,641:DEBUG:MainController.initialize_componentscalledwithargs<control......
  • 使用 DQN 实现 pong,使用 python 中的特征向量而不是像素。我的 DQNA 实现代码正确吗,因
    我正在致力于使用OpenAI的Gym为Pong游戏实现强化学习(RL)环境。目标是训练人工智能代理通过控制球拍来打乒乓球。代理收到太多负面奖励,即使它看起来移动正确。具体来说,奖励函数会惩罚远离球的智能体,但这种情况发生得太频繁,即使球朝球拍移动时似乎也会发生。观察......
  • Python CDLL 无法加载两次
    我正在尝试用python创建一个密码管理器,但遇到了一个问题,一旦加载了一种类型的dll,我就无法加载不同的dll,在这个示例中,我加载了一个dll,并尝试解密加密的密码数据,它工作正常,直到我加载另一个不同的nss3.dll文件,此时它给我一个错误:“过程入口点HeapAlloc无法位于动态链......
  • 你能将 HTTPS 功能添加到 python Flask Web 服务器吗?
    我正在尝试构建一个Web界面来模拟网络设备上的静态接口,该网络设备使用摘要式身份验证和HTTPS。我想出了如何将摘要式身份验证集成到Web服务器中,但我似乎无法找到如何使用FLASK获取https,如果您可以向我展示如何实现,请评论我需要使用下面的代码做什么来实现这一点。from......
  • Python:比较 csv 文件并打印相似之处
    我需要比较两个csv文件并打印出它们的相似之处。第一个文件有名称和浓度,第二个文件就像只有名称的“最佳”列表,我需要绘制相似性图表。例如,这就是我的列表的样子:file1-old_file.csvname_id,conc_test1,conc_test2name1,####,####name2,###......
  • Python 类交叉引用
    我用Python创建了一个数独游戏。我有一个:单元格类-“保存”数字可能性单元格组-保存单元格类实例我使用这些组在数独中运行行、列和正方形功能。每个单元格包含所有组,他属于classCell:def__init__(groups):self.groups=groupscla......
  • 如何修复我的 Python Azure Function DevOps Pipeline 上的“找到 1 个函数(自定义)加载
    我正在尝试使用AzureDevOps构建管道将PythonAzureFunction部署到Azure门户。由于某种原因,代码被部署到服务器,但我在尝试访问端点时收到404错误。我收到一个错误,显示1functionsfound(Custom)0functionsloaded,以及在服务器上显示ModuleNotFound......
  • 使用 kivy 从 python 脚本的 buildozer 构建 android apk 时出错
    我想从使用kivy包构建的Python脚本构建apk为此,我使用googlecollab.这里是main.py脚本:importyoutube_dlfromkivy.appimportAppfromkivy.uix.boxlayoutimportBoxLayoutfromkivy.uix.buttonimportButtonfromkivy.uix.tex......