命名图像并使用Python Docker SDK创建容器

时间:2018-11-12 13:50:22

标签: python docker sdk

我目前需要使用Python Docker SDK从Dockerfile创建映像,然后基于该映像运行容器。我知道如何基于手动创建的图像运行容器,但是,当我尝试使用Python Docker SDK创建图像时,我不知道如何将名称传递给图像,然后可以当我基于图像运行容器时参考。看文档here,我没有看到name参数。

当我使用SDK创建基于Dockerfile的映像时,它将创建一个未命名的映像,但是具有ID。

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: ''>

它有一个ID,但是:1e3bc3e1eb43

我现在拥有的Dockerfile非常简单:

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

我希望能够使用自己选择的名称创建映像,然后使用Python Docker SDK运行基于该映像的容器。

2 个答案:

答案 0 :(得分:0)

从文档here中,您可以构建一个docker映像并使用“ tag”对其进行标记 参数。

  

标签(str)–要添加到最终图像的标签

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

上面的这段代码实际上就像您在docker cli中键入docker build -t {image_tag} .命令一样。

然后,使用特定的图像标签运行docker容器。

client.containers.run({image_tag}, name={container_name}, detach=True)

答案 1 :(得分:-1)

我能够从图像中提取ID,然后在创建容器时将其传递给我们。

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()