我目前需要使用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运行基于该映像的容器。
答案 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()