diff --git a/fig/cli/main.py b/fig/cli/main.py index 36ae62524..8eb912d40 100644 --- a/fig/cli/main.py +++ b/fig/cli/main.py @@ -258,10 +258,11 @@ class TopLevelCommand(Command): Options: -d Detached mode: Run container in the background, print new container name. + --entrypoint Override the entrypoint of the image. + --no-deps Don't start linked services. + --rm Remove container after run. Ignored in detached mode. -T Disable pseudo-tty allocation. By default `fig run` allocates a TTY. - --rm Remove container after run. Ignored in detached mode. - --no-deps Don't start linked services. """ service = project.get_service(options['SERVICE']) @@ -289,6 +290,10 @@ class TopLevelCommand(Command): 'tty': tty, 'stdin_open': not options['-d'], } + + if options['--entrypoint']: + container_options['entrypoint'] = options.get('--entrypoint') + container = service.create_container(one_off=True, **container_options) if options['-d']: service.start_container(container, ports=None, one_off=True) diff --git a/fig/container.py b/fig/container.py index a4042c868..7e06bde35 100644 --- a/fig/container.py +++ b/fig/container.py @@ -89,7 +89,9 @@ class Container(object): @property def human_readable_command(self): - return ' '.join(self.get('Config.Cmd') or '') + entrypoint = self.get('Config.Entrypoint') or [] + cmd = self.get('Config.Cmd') or [] + return ' '.join(entrypoint + cmd) @property def environment(self): diff --git a/tests/fixtures/dockerfile_with_entrypoint/Dockerfile b/tests/fixtures/dockerfile_with_entrypoint/Dockerfile new file mode 100644 index 000000000..7d28d2933 --- /dev/null +++ b/tests/fixtures/dockerfile_with_entrypoint/Dockerfile @@ -0,0 +1,2 @@ +FROM busybox:latest +ENTRYPOINT echo "From prebuilt entrypoint" diff --git a/tests/fixtures/dockerfile_with_entrypoint/fig.yml b/tests/fixtures/dockerfile_with_entrypoint/fig.yml new file mode 100644 index 000000000..a10381187 --- /dev/null +++ b/tests/fixtures/dockerfile_with_entrypoint/fig.yml @@ -0,0 +1,2 @@ +service: + build: tests/fixtures/dockerfile_with_entrypoint diff --git a/tests/integration/cli_test.py b/tests/integration/cli_test.py index 10afbe7a6..728676c10 100644 --- a/tests/integration/cli_test.py +++ b/tests/integration/cli_test.py @@ -191,6 +191,21 @@ class CLITestCase(DockerClientTestCase): [u'/bin/true'], ) + @patch('dockerpty.start') + def test_run_service_with_entrypoint_overridden(self, _): + self.command.base_dir = 'tests/fixtures/dockerfile_with_entrypoint' + name = 'service' + self.command.dispatch( + ['run', '--entrypoint', '/bin/echo', name, 'helloworld'], + None + ) + service = self.project.get_service(name) + container = service.containers(stopped=True, one_off=True)[0] + self.assertEqual( + container.human_readable_command, + u'/bin/echo helloworld' + ) + def test_rm(self): service = self.project.get_service('simple') service.create_container()