使用 Python Docker API 从 tar 创建 docker

我想使用远程 docker 主机通过 Python Docker API 从内存中的 tar 构建图像。


当我只发送一个 Dockerfile 时,我已经成功创建了一个 docker 镜像,如下所示:


client.images.build(fileobj=BytesIO(dockerfile_str.encode("utf-8"))

                    tag="some_image_name",

                    encoding="utf-8")

但是,当我尝试根据文档设置custom_context=True并传递 a 时tar archive,它失败并显示错误:


docker.errors.APIError: 500 Server Error: Internal Server Error ("Cannot locate specified Dockerfile: Dockerfile")

这就是我尝试这样做的方式:


with tarfile.open(fileobj=BytesIO(), mode="w") as tar:

    dockerfile_str = """

        FROM ubuntu


        ENTRYPOINT ["printf", "Given command is %s"]


        CMD ["not given"]

    """.encode("utf-8")


    dockerfile_tar_info = tarfile.TarInfo("Dockerfile")

    dockerfile_tar_info.size = len(dockerfile_str)


    tar.addfile(dockerfile_tar_info, BytesIO(dockerfile_str))


    client = docker.DockerClient("some_url")

    client.images.build(fileobj=tar.fileobj,

                        custom_context=True,

                        dockerfile="Dockerfile",

                        tag="some_image_name",

                        encoding="utf-8")

    client.close()

编辑:


如果我通过磁盘进行路由:


...

with tarfile.open("tmp_1.tar", mode="w") as tar:

...

client.images.build(fileobj=tarfile.open("tmp_1.tar", mode="r").fileobj,

...

我反而收到以下错误消息:


docker.errors.APIError: 500 Server Error: Internal Server Error ("archive/tar: invalid tar header")  


繁星淼淼
浏览 340回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python