summaryrefslogtreecommitdiff
path: root/docker/api/build.py
diff options
context:
space:
mode:
authorJoffrey F <joffrey@docker.com>2018-03-30 10:22:39 -0700
committerJoffrey F <joffrey@docker.com>2018-03-30 10:41:18 -0700
commit72ad0d85eb9a1df1711917504efbcf6f418be1fe (patch)
tree3885fc3eedd860a35bc17a9a94b138e2b3fbb8f9 /docker/api/build.py
parentbdee6e308734dfb0d1cd959575222b081e150d2f (diff)
downloaddocker-py-1980-relative-dockerfile.tar.gz
Properly handle relative Dockerfile paths and Dockerfile on different drives1980-relative-dockerfile
Signed-off-by: Joffrey F <joffrey@docker.com>
Diffstat (limited to 'docker/api/build.py')
-rw-r--r--docker/api/build.py29
1 files changed, 20 insertions, 9 deletions
diff --git a/docker/api/build.py b/docker/api/build.py
index 2a22759..d69985e 100644
--- a/docker/api/build.py
+++ b/docker/api/build.py
@@ -149,15 +149,7 @@ class BuildApiMixin(object):
lambda x: x != '' and x[0] != '#',
[l.strip() for l in f.read().splitlines()]
))
- if dockerfile and os.path.relpath(dockerfile, path).startswith(
- '..'):
- with open(dockerfile, 'r') as df:
- dockerfile = (
- '.dockerfile.{0:x}'.format(random.getrandbits(160)),
- df.read()
- )
- else:
- dockerfile = (dockerfile, None)
+ dockerfile = process_dockerfile(dockerfile, path)
context = utils.tar(
path, exclude=exclude, dockerfile=dockerfile, gzip=gzip
)
@@ -312,3 +304,22 @@ class BuildApiMixin(object):
)
else:
log.debug('No auth config found')
+
+
+def process_dockerfile(dockerfile, path):
+ if not dockerfile:
+ return (None, None)
+
+ abs_dockerfile = dockerfile
+ if not os.path.isabs(dockerfile):
+ abs_dockerfile = os.path.join(path, dockerfile)
+
+ if (os.path.splitdrive(path)[0] != os.path.splitdrive(abs_dockerfile)[0] or
+ os.path.relpath(abs_dockerfile, path).startswith('..')):
+ with open(abs_dockerfile, 'r') as df:
+ return (
+ '.dockerfile.{0:x}'.format(random.getrandbits(160)),
+ df.read()
+ )
+ else:
+ return (dockerfile, None)