Python 动态构建时,如何将文件复制到docker映像

Python 动态构建时,如何将文件复制到docker映像,python,docker,dockerpy,Python,Docker,Dockerpy,我想使用Python/docker py动态构建docker映像。我的示例代码如下所示。问题是我在COPY命令中遇到了构建上下文之外的禁止路径。我不知道如何放置build.sql(sql\u build\u path}文件,以避免在动态情况下出现这种情况 docker_file = f""" FROM postgres ENV POSTGRES_USER myuser ENV POSTGRES_PASSWORD mypassword ENV POSTGRES_DB

我想使用Python/docker py动态构建docker映像。我的示例代码如下所示。问题是我在COPY命令中遇到了构建上下文之外的禁止路径。我不知道如何放置build.sql(sql\u build\u path}文件,以避免在动态情况下出现这种情况

docker_file = f"""
    FROM postgres
    ENV POSTGRES_USER myuser
    ENV POSTGRES_PASSWORD mypassword
    ENV POSTGRES_DB mydb
    ENV ON_ERROR_STOP 1
    COPY {sql_build_path} /docker-entrypoint-initdb.d/
"""
f = io.BytesIO(docker_file.encode('utf-8'))
client = docker.from_env()
client.images.build(fileobj=f, tag="test", rm=True)
[编辑]
谢谢,Jeevan——我发现这是一个已知的(有点争议的)有限的安全问题。动态构建docker文件并将资源复制到目录似乎是最好的响应。对于我的解决方案,我选择了python的临时目录API

with tempfile.TemporaryDirectory() as temp_dir:
    # save docker file to this directory
    # copy other files to this directory
    name, updates = client.images.build(path=temp_dir, dockerfile='Dockerfile', tag="test")
    for u in updates:
        print(u)

默认情况下,
fileobj
发送一个没有任何构建上下文的
Dockerfile
,这就是为什么不能复制任何内容

这是我的答覆:

创建Dockerfile并在Dockerfile的目录中复制
build.sql

构建img.py

Dockerfile


谢谢,这是我目前正在做的变通方法——但对于一个合理的用例来说,这似乎比它应该做的更多。我会坚持下去,看看是否有人有更直接的方法。如果没有,我会相信你的答案。
import docker
path = '/root/Test/'  # Where Dockerfile and build.sql resides
client = docker.from_env()
print("Building image")
client.images.build(path=path, dockerfile='Dockerfile',tag="test-image")
FROM postgres
ENV POSTGRES_USER myuser
ENV POSTGRES_PASSWORD mypassword
ENV POSTGRES_DB mydb
ENV ON_ERROR_STOP 1
COPY build.sql /docker-entrypoint-initdb.d/