mirror of
https://github.com/docker/compose.git
synced 2025-07-22 21:24:38 +02:00
Prevent service to create a container if it is referencing itself in an external link
Signed-off-by: Joffrey F <joffrey@docker.com>
This commit is contained in:
parent
682b5b7480
commit
5ea9167334
@ -22,6 +22,7 @@ from . import const
|
|||||||
from . import progress_stream
|
from . import progress_stream
|
||||||
from .config import DOCKER_CONFIG_KEYS
|
from .config import DOCKER_CONFIG_KEYS
|
||||||
from .config import merge_environment
|
from .config import merge_environment
|
||||||
|
from .config.errors import DependencyError
|
||||||
from .config.types import ServicePort
|
from .config.types import ServicePort
|
||||||
from .config.types import VolumeSpec
|
from .config.types import VolumeSpec
|
||||||
from .const import DEFAULT_TIMEOUT
|
from .const import DEFAULT_TIMEOUT
|
||||||
@ -872,7 +873,17 @@ class Service(object):
|
|||||||
if self.custom_container_name and not one_off:
|
if self.custom_container_name and not one_off:
|
||||||
return self.custom_container_name
|
return self.custom_container_name
|
||||||
|
|
||||||
return build_container_name(self.project, self.name, number, one_off)
|
container_name = build_container_name(
|
||||||
|
self.project, self.name, number, one_off,
|
||||||
|
)
|
||||||
|
ext_links_origins = [l.split(':')[0] for l in self.options.get('external_links', [])]
|
||||||
|
if container_name in ext_links_origins:
|
||||||
|
raise DependencyError(
|
||||||
|
'Service {0} has a self-referential external link: {1}'.format(
|
||||||
|
self.name, container_name
|
||||||
|
)
|
||||||
|
)
|
||||||
|
return container_name
|
||||||
|
|
||||||
def remove_image(self, image_type):
|
def remove_image(self, image_type):
|
||||||
if not image_type or image_type == ImageType.none:
|
if not image_type or image_type == ImageType.none:
|
||||||
|
@ -7,6 +7,7 @@ from docker.errors import APIError
|
|||||||
|
|
||||||
from .. import mock
|
from .. import mock
|
||||||
from .. import unittest
|
from .. import unittest
|
||||||
|
from compose.config.errors import DependencyError
|
||||||
from compose.config.types import ServicePort
|
from compose.config.types import ServicePort
|
||||||
from compose.config.types import VolumeFromSpec
|
from compose.config.types import VolumeFromSpec
|
||||||
from compose.config.types import VolumeSpec
|
from compose.config.types import VolumeSpec
|
||||||
@ -170,6 +171,14 @@ class ServiceTest(unittest.TestCase):
|
|||||||
2000000000
|
2000000000
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def test_self_reference_external_link(self):
|
||||||
|
service = Service(
|
||||||
|
name='foo',
|
||||||
|
external_links=['default_foo_1']
|
||||||
|
)
|
||||||
|
with self.assertRaises(DependencyError):
|
||||||
|
service.get_container_name(1)
|
||||||
|
|
||||||
def test_mem_reservation(self):
|
def test_mem_reservation(self):
|
||||||
self.mock_client.create_host_config.return_value = {}
|
self.mock_client.create_host_config.return_value = {}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user