diff --git a/compose/service.py b/compose/service.py index 48cbc1702..e77780fd8 100644 --- a/compose/service.py +++ b/compose/service.py @@ -363,7 +363,9 @@ class Service(object): @property def image_name(self): - return self.options.get('image', '{s.project}_{s.name}'.format(s=self)) + return self.options.get('image', '{project}_{s.name}'.format( + s=self, project=self.project.lstrip('_-') + )) @property def platform(self): diff --git a/tests/integration/service_test.py b/tests/integration/service_test.py index d8f4d094a..88123152c 100644 --- a/tests/integration/service_test.py +++ b/tests/integration/service_test.py @@ -1137,6 +1137,21 @@ class ServiceTest(DockerClientTestCase): service.build() assert service.image() + def test_build_with_illegal_leading_chars(self): + base_dir = tempfile.mkdtemp() + self.addCleanup(shutil.rmtree, base_dir) + with open(os.path.join(base_dir, 'Dockerfile'), 'w') as f: + f.write('FROM busybox\nRUN echo "Embodiment of Scarlet Devil"\n') + service = Service( + 'build_leading_slug', client=self.client, + project='___-composetest', build={ + 'context': text_type(base_dir) + } + ) + assert service.image_name == 'composetest_build_leading_slug' + service.build() + assert service.image() + def test_start_container_stays_unprivileged(self): service = self.create_service('web') container = create_and_start_container(service).inspect()