0

我点击了这个链接 - https://docs.docker.com/engine/api/sdk/examples/并且在我使用 Docker 容器时 docker SDK 运行良好。现在我已经转移到 K8s,当我运行代码时,我会收到类似 "Container Not Found" 的错误。有没有办法在 Kubernetes PODS 中使用 Python Docker SDK?错误:

docker.errors.NotFound: 404 Client Error for http+docker://localhost/v1.41/containers/taskmanager-son/json: Not Found ("No such container: taskmanager-son")

注意:作为普通 Docker 容器运行时,我没有遇到此错误。仅当代码在 k8s PODS 内运行时才会发生这种情况。

注意:由于所有容器都在 K8s PODS 中运行,所以 docker ps 也不返回任何内容

import docker
docker_client = docker.from_env()
print(docker_client.containers.list())
# Returns none since since all containers are running inside K8s PODS

您可以在此处参考 Python Docker SDK: https ://docker-py.readthedocs.io/en/stable/

4

1 回答 1

2

你不能在 Kubernetes 内部使用 Docker API;您需要改用Kubernetes API。您可以使用 Kubernetes API 完成许多与 Docker API 相同的事情(启动新作业、查询现有 Pod,...)。但是,您无法构建新的镜像,您执行的操作集会受到 Kubernetes RBAC 系统的限制,并且难以接管主机。

Docker API 有一些重要的安全考虑,并且不能保证 Kubernetes 可以正常运行 Docker。还值得注意的是,Docker API 只能检查或操作同一节点上的容器,而 Kubernetes API 可以看到集群中的所有内容。

(这两个环境之间的差异是避免直接访问任何一个 API 的一个很好的理由,如果你可以避免的话。例如,像 RabbitMQ 这样的作业队列系统加上一个长时间运行的工作人员可以在任何环境中运行,并且更容易规模和控制,而不是为每个作业启动一个单独的容器。)

于 2021-04-13T14:49:45.793 回答