mirror of https://github.com/docker/compose.git
Don't attempt to create resources with name starting with illegal characters
Signed-off-by: Joffrey F <joffrey@docker.com>
This commit is contained in:
parent
1cf1217ecb
commit
d5ebc73482
|
@ -1355,7 +1355,7 @@ class ServiceNetworkMode(object):
|
|||
|
||||
|
||||
def build_container_name(project, service, number, one_off=False):
|
||||
bits = [project, service]
|
||||
bits = [project.lstrip('-_'), service]
|
||||
if one_off:
|
||||
bits.append('run')
|
||||
return '_'.join(bits + [str(number)])
|
||||
|
|
|
@ -60,7 +60,7 @@ class Volume(object):
|
|||
def full_name(self):
|
||||
if self.custom_name:
|
||||
return self.name
|
||||
return '{0}_{1}'.format(self.project, self.name)
|
||||
return '{0}_{1}'.format(self.project.lstrip('-_'), self.name)
|
||||
|
||||
@property
|
||||
def legacy_full_name(self):
|
||||
|
|
|
@ -1915,3 +1915,65 @@ class ProjectTest(DockerClientTestCase):
|
|||
assert len(remote_secopts) == 1
|
||||
assert remote_secopts[0].startswith('seccomp=')
|
||||
assert json.loads(remote_secopts[0].lstrip('seccomp=')) == seccomp_data
|
||||
|
||||
@no_cluster('inspect volume by name defect on Swarm Classic')
|
||||
def test_project_up_name_starts_with_illegal_char(self):
|
||||
config_dict = {
|
||||
'version': '2.3',
|
||||
'services': {
|
||||
'svc1': {
|
||||
'image': 'busybox:latest',
|
||||
'command': 'ls',
|
||||
'volumes': ['foo:/foo:rw'],
|
||||
'networks': ['bar'],
|
||||
},
|
||||
},
|
||||
'volumes': {
|
||||
'foo': {},
|
||||
},
|
||||
'networks': {
|
||||
'bar': {},
|
||||
}
|
||||
}
|
||||
config_data = load_config(config_dict)
|
||||
project = Project.from_config(
|
||||
name='_underscoretest', config_data=config_data, client=self.client
|
||||
)
|
||||
project.up()
|
||||
self.addCleanup(project.down, None, True)
|
||||
|
||||
containers = project.containers(stopped=True)
|
||||
assert len(containers) == 1
|
||||
assert containers[0].name == 'underscoretest_svc1_1'
|
||||
assert containers[0].project == '_underscoretest'
|
||||
|
||||
full_vol_name = 'underscoretest_foo'
|
||||
vol_data = self.get_volume_data(full_vol_name)
|
||||
assert vol_data
|
||||
assert vol_data['Labels'][LABEL_PROJECT] == '_underscoretest'
|
||||
|
||||
full_net_name = '_underscoretest_bar'
|
||||
net_data = self.client.inspect_network(full_net_name)
|
||||
assert net_data
|
||||
assert net_data['Labels'][LABEL_PROJECT] == '_underscoretest'
|
||||
|
||||
project2 = Project.from_config(
|
||||
name='-dashtest', config_data=config_data, client=self.client
|
||||
)
|
||||
project2.up()
|
||||
self.addCleanup(project2.down, None, True)
|
||||
|
||||
containers = project2.containers(stopped=True)
|
||||
assert len(containers) == 1
|
||||
assert containers[0].name == 'dashtest_svc1_1'
|
||||
assert containers[0].project == '-dashtest'
|
||||
|
||||
full_vol_name = 'dashtest_foo'
|
||||
vol_data = self.get_volume_data(full_vol_name)
|
||||
assert vol_data
|
||||
assert vol_data['Labels'][LABEL_PROJECT] == '-dashtest'
|
||||
|
||||
full_net_name = '-dashtest_bar'
|
||||
net_data = self.client.inspect_network(full_net_name)
|
||||
assert net_data
|
||||
assert net_data['Labels'][LABEL_PROJECT] == '-dashtest'
|
||||
|
|
Loading…
Reference in New Issue