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