简而言之:问题是,我希望docker客户端从用户定义的上下文运行docker build命令
长: 这是我的目录结构
main_directory
└── package
├──directory_x
└──directory_y
├──docker
| └──Dockerfile
+-─dockerclient.py
:
docker文件有一个步骤,我需要将整个main_directory
复制到temp
文件夹中
COPY . /path/temp/main_directory/
从main_directory
起,以下命令起作用
docker build -t foo:bar -f package/directory_y/docker/Dockerfile .
但是我在使用python docker客户机时不能这样做,因为它要求我提供Dockerfile的path
,然后它从给定的路径运行docker build
命令。我的dockerclient.py
有以下代码
import docker
from ast import literal_eval
class DockerBuildException(BaseException): pass
client = docker.from_env()
dirPath = os.path.dirname(os.path.realpath(__file__))
# dirPath = path/to/main_directory/jagex_airflow/test
try:
responce = client.images.build(path=dirPath + "/docker", tag="foo:bar")
print(responce)
for i in responce:
if b'errorDetail' in i:
d = literal_eval(i.decode('ascii'))
raise DockerBuildException(d['errorDetail']['message'])
except DockerBuildException as e:
print("Error: " + e.args[0])
raise
这种方法的问题是COPY .
会将所有文件/目录从~/main_directory/jagex_airflow/test/docker
复制到容器中。而我希望它复制main_directory
中的所有内容
我还尝试分别传递Dockerfile路径和context路径
with open(dirPath + "/docker/Dockerfile") as file_:
dockerfile = file_.read()
f = BytesIO(dockerfile.encode('utf-8'))
client.images.build(path="path/to/main_directory/", fileobj=f, tag="foo:bar")
但这也不管用
我想知道client.images.build
是否有任何可选参数来指定从何处运行docker build
命令,以及一个单独的参数来说明Dockerfile
的路径?
有人问过类似的问题here,但没有正确答案。从用户的评论中,有人建议将Dockerfile保存在根目录中,但我不想这样做。我的意思是,如果可以使用裸骨docker build
命令,那么为什么不使用python客户机呢?或者docker python SDK真的有这个限制吗?如果是这样的话,有人能推荐我docker的其他python客户端吗(如果有的话)
目前没有回答
相关问题 更多 >
编程相关推荐