Skip to content

Commit

Permalink
GH-7397: Handle symlinked Dockerfiles
Browse files Browse the repository at this point in the history
Signed-off-by: Oliver Bristow <evilumbrella+github@gmail.com>
  • Loading branch information
Code0x58 committed Apr 29, 2020

Verified

This commit was signed with the committer’s verified signature.
scala-steward Scala Steward
1 parent 9c5351c commit a99e14a
Showing 1 changed file with 20 additions and 5 deletions.
25 changes: 20 additions & 5 deletions compose/service.py
Original file line number Diff line number Diff line change
@@ -1082,6 +1082,22 @@ def build(self, no_cache=False, pull=False, force_rm=False, memory=None, build_a
'Impossible to perform platform-targeted builds for API version < 1.35'
)

dockerfile_opt = build_opts.get('dockerfile', None)
# logic based on https://github.com/docker/docker-py/blob/4.2.0/docker/api/build.py#L144
if path.startswith(('http://', 'https://',
'git://', 'github.com/', 'git@')):
fileobj = None
dockerfile = dockerfile_opt
elif gzip:
if dockerfile_opt and os.path.islink(os.path.join(path, dockerfile_opt)):
# let the daemon do the complaining
log.warning('Dockerfile is a symlink and --compress is used')
fileobj = None
dockerfile = dockerfile_opt
else:
fileobj = open(os.path.join(path, dockerfile_opt or 'Dockerfile'), 'rb')
dockerfile = None

builder = self.client if not cli else _CLIBuilder(progress)
build_output = builder.build(
path=path,
@@ -1090,7 +1106,8 @@ def build(self, no_cache=False, pull=False, force_rm=False, memory=None, build_a
forcerm=force_rm,
pull=pull,
nocache=no_cache,
dockerfile=build_opts.get('dockerfile', None),
dockerfile=dockerfile,
fileobj=fileobj,
cache_from=self.get_cache_from(build_opts),
labels=build_opts.get('labels', None),
buildargs=build_args,
@@ -1783,14 +1800,12 @@ def build(self, path, tag=None, quiet=False, fileobj=None,
Returns:
A generator for the build output.
"""
if dockerfile:
dockerfile = os.path.join(path, dockerfile)
iidfile = tempfile.mktemp()

command_builder = _CommandBuilder()
command_builder.add_params("--build-arg", buildargs)
command_builder.add_list("--cache-from", cache_from)
command_builder.add_arg("--file", dockerfile)
command_builder.add_arg("--file", "-" if fileobj else dockerfile)
command_builder.add_flag("--force-rm", forcerm)
command_builder.add_params("--label", labels)
command_builder.add_arg("--memory", container_limits.get("memory"))
@@ -1804,7 +1819,7 @@ def build(self, path, tag=None, quiet=False, fileobj=None,

magic_word = "Successfully built "
appear = False
with subprocess.Popen(args, stdout=subprocess.PIPE, universal_newlines=True) as p:
with subprocess.Popen(args, stdout=subprocess.PIPE, universal_newlines=True, stdin=fileobj) as p:
while True:
line = p.stdout.readline()
if not line:

0 comments on commit a99e14a

Please sign in to comment.