python - 如何使用带有自定义标签名称的 python API 构建本地 docker 映像
问题描述
我有这个脚本:
import docker
import os
localtag = "mypersonaltag"
client = docker.from_env()
dockerfile_path = os.path.dirname(os.getcwd())
print(dockerfile_path)
fname = dockerfile_path + "/Dockerfile"
path = os.path.dirname(fname)
image, build_log = client.images.build(path=dockerfile_path, dockerfile='Dockerfile', tag='localtag', rm=True)
print(image)
如果我执行这个脚本,它会创建并构建本地 docker 镜像,标签名称为 localtag,而不是 mypersonaltag。我已经尝试了所有其他可能的方式,如下所示,看看标签参数。它抛出错误。
image, build_log = client.images.build(path=dockerfile_path, dockerfile='Dockerfile', tag=localtag, rm=True)
或
图像,build_log = client.images.build(path=dockerfile_path, dockerfile='Dockerfile', tag={localtag}, rm=True)
但奇怪的是,这个[image, build_log = client.images.build(path=dockerfile_path, dockerfile='Dockerfile', tag=localtag, rm=True)]
命令通过 python 编辑器完美地工作,而使用 python 脚本它给出了错误。不知道为什么?但是,只要我在标签周围加上引号,正在破坏的 python 脚本现在就可以正常工作了。
>>> tag = "test02"
>>> image, build_log = client.images.build(path=path, dockerfile='Dockerfile', tag=tag, rm=True)
>>> print(image)
<Image: 'local_tag:latest', 'localtag:latest', 'test01:latest', 'test02:latest'>
解决方案
image, build_log = client.images.build(path=dockerfile_path, dockerfile='Dockerfile', tag=localtag, rm=True)
将变量传递给函数是问题,删除 localtag 周围的引号
如果你以这种方式传递变量tag={localtag}
,那么你就是在告诉 python:“嘿,可以变量,把它放在集合中,然后把这个集合传递给函数”。可能你会尝试f"{localtag}"
使用 fstring 构造(需要 python3.6)。
--edit--
请告诉我们,你如何调用你的脚本?错误是什么?
推荐阅读
- haskell - 使用预定义变量的 Haskell 代码
- python - 在 OSMnx 中绘制不同的区域对象
- python - StackDriver 条目应该如何创建?
- python - 浅拷贝()方法没有按预期工作?
- python - 3D 局部平均值和使用 3D 卷积
- elasticsearch - ElasticSearch - 如何在聚合中重用 script_fields 字段?
- r - 当所有数据都混合在R中的数据集中时,如何用学期与三个月来规范化数据
- vue.js - Vue中如何导入大数组
- c++ - C++ 读取输入文件
- python - 如何将具有相同索引 0 的两个子列表合并到一个子列表中?