Я хочу использовать docker sdk внутри работающего контейнера docker и хочу создать docker образ внутри работающего контейнера docker и развернуть его в мини-кубе - PullRequest
0 голосов
/ 04 февраля 2020
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 "

Я хочу перечислить все 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'))

1 Ответ

1 голос
/ 04 февраля 2020

Использование docker в контейнере docker может быть выполнено двумя способами:

  1. Используя docker демон хоста.
  2. Реальная установка и использование docker внутри другого docker.

Метод 2, как правило, не то, что вы хотите сделать, так как он имеет много нежелательных побочных эффектов. Для метода 1 вам необходимо:

  1. Установить docker -кли в вашем изображении, добавить его в 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"
При работе с контейнером docker необходимо смонтировать docker сокет deamon вашего хост-компьютера:
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/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...