Назовите изображение и создайте контейнер с помощью Python Docker SDK - PullRequest
0 голосов
/ 12 ноября 2018

В настоящее время у меня есть необходимость создать образ из Dockerfile с помощью Python Docker SDK, а затем запустить контейнер на основе этого образа.Я знаю, как запустить контейнер на основе изображения, которое я создаю вручную, однако, когда я пытаюсь использовать Python Docker SDK для создания изображения, я не могу понять, как передать имя изображению, которое я могу затемссылка, когда я запускаю контейнер на основе изображения.Глядя на документы здесь Я не вижу параметра для имени.

Когда я создаю образ на основе Dockerfile, используя SDK, он создает неназванное изображение, но имеет идентификатор.

import docker

def main():
    folder_path = './node-sample'
    client = docker.from_env()

    try:
        image = client.images.build(path=folder_path)
        print image
    except RuntimeError as e:
        print e

if __name__ == '__main__':
    main()

Это изображение, которое он создает, ононе имеет имени: <Image: ''>

У него есть идентификатор, хотя: 1e3bc3e1eb43

У меня есть Dockerfile, который очень прост:

FROM node:6.14.2
EXPOSE 8080
COPY server.js .
CMD node server.js

Я хотел бы иметь возможность создать изображение с выбранным именем, а затем запустить контейнер на основе этого изображения с помощью Python Docker SDK.

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

Из документа здесь вы можете создать изображение докера и пометить его с помощью параметра "tag".

tag (str) - тег для добавления к окончательному изображению

client.images.build(path="./", tag={image_tag})

этот код выше на самом деле, как будто вы набираете команду docker build -t {image_tag} . в докере cli.

затем, используя специальный тег изображения для запуска контейнера докера.

client.containers.run({image_tag}, name={container_name}, detach=True)
0 голосов
/ 12 ноября 2018

Мне удалось извлечь идентификатор из изображения, а затем передать его при создании контейнера.

import docker
import re

def main():
    folder_path = './node-sample'
    client = docker.from_env()

    try:
        image = client.images.build(path=folder_path)[0]
        image_id = re.sub(r'(sha256:)', '', image.short_id)
        client.containers.run(image_id, detach=True, ports={'8080/tcp': 8080})
    except RuntimeError as e:
        print e

if __name__ == '__main__':
    main()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...