1
0
Эх сурвалжийг харах

Add support for the --entrypoint option of docker run

Signed-off-by: Satoru Logic <[email protected]>
satoru 11 жил өмнө
parent
commit
62b9c64311

+ 5 - 0
fig/cli/main.py

@@ -262,6 +262,7 @@ class TopLevelCommand(Command):
                        allocates a TTY.
             --rm       Remove container after run. Ignored in detached mode.
             --no-deps  Don't start linked services.
+            --entrypoint  Override the entrypoint of the image.
         """
         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)

+ 3 - 1
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):

+ 2 - 0
tests/fixtures/dockerfile_with_entrypoint/Dockerfile

@@ -0,0 +1,2 @@
+FROM busybox:latest
+ENTRYPOINT echo "From prebuilt entrypoint"

+ 2 - 0
tests/fixtures/dockerfile_with_entrypoint/fig.yml

@@ -0,0 +1,2 @@
+service:
+  build: tests/fixtures/dockerfile_with_entrypoint

+ 15 - 0
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()