mirror of https://github.com/docker/compose.git
Merge pull request #9130 from laurazard/fix_mac_address_network_priority
Set NetworkMode correctly according to network priorities
This commit is contained in:
commit
5262d3bbf5
|
@ -445,14 +445,16 @@ func (s *composeService) prepareLabels(p *types.Project, service types.ServiceCo
|
||||||
}
|
}
|
||||||
|
|
||||||
func getDefaultNetworkMode(project *types.Project, service types.ServiceConfig) string {
|
func getDefaultNetworkMode(project *types.Project, service types.ServiceConfig) string {
|
||||||
mode := "none"
|
if len(project.Networks) == 0 {
|
||||||
if len(project.Networks) > 0 {
|
return "none"
|
||||||
for name := range getNetworksForService(service) {
|
|
||||||
mode = project.Networks[name].Name
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return mode
|
|
||||||
|
if len(service.Networks) > 0 {
|
||||||
|
name := service.NetworksByPriority()[0]
|
||||||
|
return project.Networks[name].Name
|
||||||
|
}
|
||||||
|
|
||||||
|
return project.Networks["default"].Name
|
||||||
}
|
}
|
||||||
|
|
||||||
func getRestartPolicy(service types.ServiceConfig) container.RestartPolicy {
|
func getRestartPolicy(service types.ServiceConfig) container.RestartPolicy {
|
||||||
|
@ -1013,16 +1015,6 @@ func getAliases(s types.ServiceConfig, c *types.ServiceNetworkConfig) []string {
|
||||||
return aliases
|
return aliases
|
||||||
}
|
}
|
||||||
|
|
||||||
func getNetworksForService(s types.ServiceConfig) map[string]*types.ServiceNetworkConfig {
|
|
||||||
if len(s.Networks) > 0 {
|
|
||||||
return s.Networks
|
|
||||||
}
|
|
||||||
if s.NetworkMode != "" {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return map[string]*types.ServiceNetworkConfig{"default": nil}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *composeService) ensureNetwork(ctx context.Context, n types.NetworkConfig) error {
|
func (s *composeService) ensureNetwork(ctx context.Context, n types.NetworkConfig) error {
|
||||||
_, err := s.apiClient.NetworkInspect(ctx, n.Name, moby.NetworkInspectOptions{})
|
_, err := s.apiClient.NetworkInspect(ctx, n.Name, moby.NetworkInspectOptions{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -151,3 +151,74 @@ func TestGetBindMode(t *testing.T) {
|
||||||
assert.Equal(t, getBindMode(&composetypes.ServiceVolumeBind{SELinux: composetypes.SELinuxShared}, true), "ro,z")
|
assert.Equal(t, getBindMode(&composetypes.ServiceVolumeBind{SELinux: composetypes.SELinuxShared}, true), "ro,z")
|
||||||
assert.Equal(t, getBindMode(&composetypes.ServiceVolumeBind{SELinux: composetypes.SELinuxPrivate}, true), "ro,Z")
|
assert.Equal(t, getBindMode(&composetypes.ServiceVolumeBind{SELinux: composetypes.SELinuxPrivate}, true), "ro,Z")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestGetDefaultNetworkMode(t *testing.T) {
|
||||||
|
t.Run("returns the network with the highest priority when service has multiple networks", func(t *testing.T) {
|
||||||
|
service := composetypes.ServiceConfig{
|
||||||
|
Name: "myService",
|
||||||
|
Networks: map[string]*composetypes.ServiceNetworkConfig{
|
||||||
|
"myNetwork1": {
|
||||||
|
Priority: 10,
|
||||||
|
},
|
||||||
|
"myNetwork2": {
|
||||||
|
Priority: 1000,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
project := composetypes.Project{
|
||||||
|
Name: "myProject",
|
||||||
|
Services: []composetypes.ServiceConfig{
|
||||||
|
service,
|
||||||
|
},
|
||||||
|
Networks: composetypes.Networks(map[string]composetypes.NetworkConfig{
|
||||||
|
"myNetwork1": {
|
||||||
|
Name: "myProject_myNetwork1",
|
||||||
|
},
|
||||||
|
"myNetwork2": {
|
||||||
|
Name: "myProject_myNetwork2",
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.Equal(t, getDefaultNetworkMode(&project, service), "myProject_myNetwork2")
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("returns default network when service has no networks", func(t *testing.T) {
|
||||||
|
service := composetypes.ServiceConfig{
|
||||||
|
Name: "myService",
|
||||||
|
}
|
||||||
|
project := composetypes.Project{
|
||||||
|
Name: "myProject",
|
||||||
|
Services: []composetypes.ServiceConfig{
|
||||||
|
service,
|
||||||
|
},
|
||||||
|
Networks: composetypes.Networks(map[string]composetypes.NetworkConfig{
|
||||||
|
"myNetwork1": {
|
||||||
|
Name: "myProject_myNetwork1",
|
||||||
|
},
|
||||||
|
"myNetwork2": {
|
||||||
|
Name: "myProject_myNetwork2",
|
||||||
|
},
|
||||||
|
"default": {
|
||||||
|
Name: "myProject_default",
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.Equal(t, getDefaultNetworkMode(&project, service), "myProject_default")
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("returns none if project has no networks", func(t *testing.T) {
|
||||||
|
service := composetypes.ServiceConfig{
|
||||||
|
Name: "myService",
|
||||||
|
}
|
||||||
|
project := composetypes.Project{
|
||||||
|
Name: "myProject",
|
||||||
|
Services: []composetypes.ServiceConfig{
|
||||||
|
service,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.Equal(t, getDefaultNetworkMode(&project, service), "none")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue