docker - 我想在正在运行的 docker 容器中使用 docker sdk,并想在正在运行的 docker 容器中构建一个 docker 镜像并将其部署在 minikube 中

标签 docker kubernetes minikube

def list_img():
    client = docker.from_env()
    k=1
    img_list = client.images.list()
    for img in img_list:
        print(k," ",img)
        k+=1
    return "Images are listed successfully "

我想在部署在 minikube 中的正在运行的 docker 容器中使用 python3 docker sdk 列出所有 docker 图像。

import docker 
def list_img():
    client = docker.from_env()
    k=1
    img_list = client.images.list()
    for img in img_list:
        print(k," ",img)
        k+=1
list_img()

Dockerfile

FROM python:3.6-slim
RUN apt upgrade
RUN apt update
RUN pip3 install flask
# RUN pip3 install kubernetes
RUN pip3 install docker

WORKDIR  /dckr_sdk
COPY  . /dckr_sdk

EXPOSE  5022
CMD [ "python3","flask4_bld_dckr_img.py" ]

我收到以下错误

File "/usr/local/lib/python3.6/site-packages/docker/transport/unixconn.py", line 43, in connect
    sock.connect(self.unix_socket)
urllib3.exceptions.ProtocolError: ('Connection aborted.', FileNotFoundError(2, 'No such file or directory'))

File "/usr/local/lib/python3.6/site-packages/requests/adapters.py", line 498, in send
    raise ConnectionError(err, request=request)
requests.exceptions.ConnectionError: ('Connection aborted.', FileNotFoundError(2, 'No such file or directory'))

最佳答案

可以通过两种方式在 docker 容器中使用 docker:

  1. 使用主机的 docker 守护程序。
  2. 真正在另一个 docker 中安装和使用 docker。

方法 2 通常不是您想要的,因为它有很多不需要的副作用。对于方法 1,您需要:

  1. 在您的镜像中安装 docker-cli,将其添加到您的 Dockerfile 或使其适应您正在使用的基础镜像:
# Install docker
RUN apt-get update
RUN apt-get -y install apt-transport-https ca-certificates curl gnupg2 software-properties-common
RUN curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
RUN add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"
  1. 运行docker容器时,需要挂载宿主机的docker deamon socket:
docker run -v /var/run/docker.sock:/var/run/docker.sock docker-image-name

这应该可以解决问题,并使您能够在自己的容器中使用 python docker sdk。更多关于 docker-in-docker 的信息:https://jpetazzo.github.io/2015/09/03/do-not-use-docker-in-docker-for-ci/

关于docker - 我想在正在运行的 docker 容器中使用 docker sdk,并想在正在运行的 docker 容器中构建一个 docker 镜像并将其部署在 minikube 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60054378/

相关文章:

docker - 如何基于现有镜像创建新的 docker 镜像?

docker - Spring Boot 尝试连接到 Mongo localhost

docker - Kubernetes 上的暂存和生产

docker - 使用带有 --driver=docker 的 minikube 无法从本地主机转发到 minikube 内部地址

docker - Kind kubernetes 集群拉取 docker 镜像失败

python - 为什么不以 root 身份运行 uwsgi 实例

kubernetes - 基于路径的路由问题 Traefik 作为入口 Controller

spring-boot - Kubernetes-通过minikube中的Spring Boot应用程序连接Elasticsearch

kubernetes - 无法使用 minikube 设置 Istio

kubernetes - 带有入口示例的 Minikube 不起作用