[cli] Lift artificial limitation on --build-arg

Currently, `docker-compose --build-arg` requires that a service be
specified as part of the command-line invocation. So,

  $ docker-compose build --build-arg nocache=`git rev-parse @` foom

works. However, when using out-of-band scripts to automate the build
process of several Docker containers (in a CI system, for instance), it
becomes difficult to specify exactly which service requires the
build-arg. Docker has supported Dockerfiles that ignore build-args for a
long time, so there is no problem is specifying spurious build-args to
builds that don't consume it.

The limitation on `docker-compose build` today is artificial, and there
are no other commands that require specifying a service. Allow
`--build-arg` to also match all services so this is possible:

  $ docker-compose build --build-arg nocache=`git rev-parse @`

Please refer to #3790 for discussion on the original feature.

Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com>
This commit is contained in:
Ramkumar Ramachandra 2017-09-22 12:01:22 -07:00 committed by Joffrey F
parent 1b3acd0be8
commit ac209a2485
1 changed files with 4 additions and 7 deletions

View File

@ -234,19 +234,15 @@ class TopLevelCommand(object):
--no-cache Do not use cache when building the image.
--pull Always attempt to pull a newer version of the image.
-m, --memory MEM Sets memory limit for the build container.
--build-arg key=val Set build-time variables for one service.
--build-arg key=val Set build-time variables for services.
"""
service_names = options['SERVICE']
build_args = options.get('--build-arg', None)
if build_args:
environment = Environment.from_env_file(self.project_dir)
build_args = resolve_build_args(build_args, environment)
if not service_names and build_args:
raise UserError("Need service name for --build-arg option")
self.project.build(
service_names=service_names,
service_names=options['SERVICE'],
no_cache=bool(options.get('--no-cache', False)),
pull=bool(options.get('--pull', False)),
force_rm=bool(options.get('--force-rm', False)),
@ -1030,7 +1026,8 @@ class TopLevelCommand(object):
if cascade_stop:
print("Aborting on container exit...")
all_containers = self.project.containers(service_names=options['SERVICE'], stopped=True)
all_containers = self.project.containers(
service_names=options['SERVICE'], stopped=True)
exit_code = compute_exit_code(
exit_value_from, attached_containers, cascade_starter, all_containers
)