Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将docker映像发送到docker hub,并使用python将其标记为最新_Python_Docker - Fatal编程技术网

将docker映像发送到docker hub,并使用python将其标记为最新

将docker映像发送到docker hub,并使用python将其标记为最新,python,docker,Python,Docker,我正在尝试将dokcer图像发送到docker hub中的我的帐户,并使用python对其进行标记 这就是我迄今为止所取得的成就: import docker client = docker.from_env() img = client.images.pull('nginx:latest') contanier = client.containers.run(img, detach=True, ports={'80/tcp': 8080}) # Here I am trying to sen

我正在尝试将dokcer图像发送到docker hub中的我的帐户,并使用python对其进行标记

这就是我迄今为止所取得的成就:

import docker

client = docker.from_env()
img = client.images.pull('nginx:latest')
contanier = client.containers.run(img, detach=True, ports={'80/tcp': 8080})
# Here I am trying to send the image to my account (docker hub account) and tag it as the latest 

我正在努力寻找一种方法,将我的图像发送到docker hub中的我的帐户,并将其标记为最新的。

如前所述,您应该认真阅读他们的文档

几个月前,我好奇地问了同样的问题。我问自己是否可以用Python来做。但是,我不想坐着等待回复,所以我从来没有在这里问过,我查阅了他们的文档和源代码来完成它

注意:此示例可能不起作用。将其作为您自己研究/实施的起点。欢迎编辑/评论此答案

免责声明:这是对测试结果的快速脏拷贝/清理

“”“
演示如何将图像推送到docker注册表的示例
使用docker模块。
开始之前,您需要一个包含以下内容的“.env”文件:
::
我们的码头工人用户名=未知
我们的码头工人密码=未知
我们的码头工人电子邮件=未知
作者:
-@funillys
"""
导入日志记录
导入操作系统
进口码头工人
从dotenv导入加载\u dotenv
DOCKER\u API\u CLIENT=DOCKER.APIClient(基本url=”unix://var/run/docker.sock")
REGISTRY=“docker.io”
#警告:我们假定您正确标记了图像!!!
#它应该按照Docker Hub的格式设置为“用户/存储库”!!
IMAGE\u TAG\u NAME=“nginx”
#让我们加载“.env”文件。
加载dotenv(“.env”)
def log_响应(响应:dict)->无:
"""
给出了Docker客户端的响应。
我们把它记录下来。
:引发异常:
当发现错误时。
"""
如果响应为“流”:
对于响应[“流”]中的行。拆分行():
如果行:
logging.info(行)
如果响应中的“progressDetail”和响应中的“status”:
如果响应中的“id”和响应[“progressDetail”]:
百分比=整数(
(回复[“进度详情”][“当前”]*100)
/响应[“进度详情”][“总计”],
2.
)
logging.info(
%s(%s):%s/%s(%s%%)“,
答复[“状态”],
响应[“id”],
响应[“进度详情”][“当前”],
响应[“进度详情”][“总计”],
百分比,
)
elif“id”响应:
logging.info(“%s(%s)”、响应[“status”]、响应[“id”])
其他:
logging.info(“%s”,响应[“状态”])
回应中的elif“errorDetail”和回应[“errorDetail”]:
引发异常(响应[“errorDetail”][“message”])
elif“状态”响应:
logging.info(“%s”,响应[“状态”])
def从_env()获取_凭证->记录:
"""
尝试从环境变量获取凭据。
:返回:
{
“用户名”:str,
“密码”:str,
“电子邮件”:str
}
"""
var2env:dict={
“用户名”:“我们的码头工人用户名”,
“密码”:“我们的码头工人密码”,
“电子邮件”:“我们的码头工人电子邮件”,
}
在var2env.items()中为k,v返回{k:os.getenv(v,None)}
def push_图像(图像:列表,凭证:dict)->无:
"""
给定要推送的凭据和图像列表,请推送
将映像复制到声明的注册表。
:参数信用:
要使用的凭据。
:参数图像:
要推送的图像列表。
"""
对于图像中的图像:
对于图像[“RepoTags”]中的标记:
publisher=DOCKER\u API\u CLIENT.push(
repository=f“{REGISTRY}/{tag}”,
流=真,
解码=真,
auth_config=creds,
)
有关publisher中的响应:
日志_响应(响应)
如果名称=“\uuuuu main\uuuuuuuu”:
logging.basicConfig(level=logging.INFO,format=“%(levelname)s:%(message)s”)
凭据=从\u env()获取\u凭据
login=DOCKER\u API\u CLIENT.login(
凭证[“用户名”],
密码=凭据[“密码”],
电子邮件=凭据[“密码”],
注册表=注册表,
reauth=True,
)
推送图像(DOCKER\u API\u CLIENT.images(name=IMAGE\u TAG\u name),凭证)
编辑1:我忘记了您的标记部分:-)

这里介绍如何将图像标记为
最新的

DOCKER\u API\u CLIENT.tag(
图像,“xxx/xxx(存储库)”,标记=最新
)
编辑2:链接

这里是我用过/写过的东西的官方链接


我希望这对别人有帮助

在中或中是否有方法可以帮助您?我确实理解您的代码,但我没有使用低级API,我使用了client(),您建议的代码将更改我的所有逻辑和实际代码。我想使用我已经实现的客户端@风趣