Allow manual port mapping when using "run" command. Fixes #1709
Signed-off-by: Karol Duleba <mr.fuxi@gmail.com>
This commit is contained in:
parent
22b7ee42de
commit
ff87ceabbd
6 changed files with 87 additions and 2 deletions
|
|
@ -343,6 +343,44 @@ class CLITestCase(DockerClientTestCase):
|
|||
self.assertIn("0.0.0.0", port_random)
|
||||
self.assertEqual(port_assigned, "0.0.0.0:49152")
|
||||
|
||||
@patch('dockerpty.start')
|
||||
def test_run_service_with_explicitly_maped_ports(self, __):
|
||||
|
||||
# create one off container
|
||||
self.command.base_dir = 'tests/fixtures/ports-composefile'
|
||||
self.command.dispatch(['run', '-d', '-p', '30000:3000', '--publish', '30001:3001', 'simple'], None)
|
||||
container = self.project.get_service('simple').containers(one_off=True)[0]
|
||||
|
||||
# get port information
|
||||
port_short = container.get_local_port(3000)
|
||||
port_full = container.get_local_port(3001)
|
||||
|
||||
# close all one off containers we just created
|
||||
container.stop()
|
||||
|
||||
# check the ports
|
||||
self.assertEqual(port_short, "0.0.0.0:30000")
|
||||
self.assertEqual(port_full, "0.0.0.0:30001")
|
||||
|
||||
@patch('dockerpty.start')
|
||||
def test_run_service_with_explicitly_maped_ip_ports(self, __):
|
||||
|
||||
# create one off container
|
||||
self.command.base_dir = 'tests/fixtures/ports-composefile'
|
||||
self.command.dispatch(['run', '-d', '-p', '127.0.0.1:30000:3000', '--publish', '127.0.0.1:30001:3001', 'simple'], None)
|
||||
container = self.project.get_service('simple').containers(one_off=True)[0]
|
||||
|
||||
# get port information
|
||||
port_short = container.get_local_port(3000)
|
||||
port_full = container.get_local_port(3001)
|
||||
|
||||
# close all one off containers we just created
|
||||
container.stop()
|
||||
|
||||
# check the ports
|
||||
self.assertEqual(port_short, "127.0.0.1:30000")
|
||||
self.assertEqual(port_full, "127.0.0.1:30001")
|
||||
|
||||
def test_rm(self):
|
||||
service = self.project.get_service('simple')
|
||||
service.create_container()
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ import docker
|
|||
import mock
|
||||
|
||||
from compose.cli.docopt_command import NoSuchCommand
|
||||
from compose.cli.errors import UserError
|
||||
from compose.cli.main import TopLevelCommand
|
||||
from compose.service import Service
|
||||
|
||||
|
|
@ -108,6 +109,7 @@ class CLITestCase(unittest.TestCase):
|
|||
'-T': None,
|
||||
'--entrypoint': None,
|
||||
'--service-ports': None,
|
||||
'--publish': [],
|
||||
'--rm': None,
|
||||
})
|
||||
|
||||
|
|
@ -136,6 +138,7 @@ class CLITestCase(unittest.TestCase):
|
|||
'-T': None,
|
||||
'--entrypoint': None,
|
||||
'--service-ports': None,
|
||||
'--publish': [],
|
||||
'--rm': None,
|
||||
})
|
||||
_, _, call_kwargs = mock_client.create_container.mock_calls[0]
|
||||
|
|
@ -160,7 +163,35 @@ class CLITestCase(unittest.TestCase):
|
|||
'-T': None,
|
||||
'--entrypoint': None,
|
||||
'--service-ports': None,
|
||||
'--publish': [],
|
||||
'--rm': True,
|
||||
})
|
||||
_, _, call_kwargs = mock_client.create_container.mock_calls[0]
|
||||
self.assertFalse('RestartPolicy' in call_kwargs['host_config'])
|
||||
|
||||
def test_command_manula_and_service_ports_together(self):
|
||||
command = TopLevelCommand()
|
||||
mock_client = mock.create_autospec(docker.Client)
|
||||
mock_project = mock.Mock(client=mock_client)
|
||||
mock_project.get_service.return_value = Service(
|
||||
'service',
|
||||
client=mock_client,
|
||||
restart='always',
|
||||
image='someimage',
|
||||
)
|
||||
|
||||
with self.assertRaises(UserError):
|
||||
command.run(mock_project, {
|
||||
'SERVICE': 'service',
|
||||
'COMMAND': None,
|
||||
'-e': [],
|
||||
'--user': None,
|
||||
'--no-deps': None,
|
||||
'--allow-insecure-ssl': None,
|
||||
'-d': True,
|
||||
'-T': None,
|
||||
'--entrypoint': None,
|
||||
'--service-ports': True,
|
||||
'--publish': ['80:80'],
|
||||
'--rm': None,
|
||||
})
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue