浏览代码

Add links to container create request.

In v1, links were sent alongside the rest of the container create request, as part of `HostConfig`. In v2, links are usually set on the connect container to network request that happens after the create. However, this only happens if the service has one or more networks defined for it. If the services are configured to use the default bridge network, this request is not made and so links are never configured.

Signed-off-by: Laura Brehm <[email protected]>
Laura Brehm 3 年之前
父节点
当前提交
81182fca53
共有 3 个文件被更改,包括 35 次插入1 次删除
  1. 6 0
      pkg/compose/create.go
  2. 9 0
      pkg/e2e/fixtures/network-links/compose.yaml
  3. 20 1
      pkg/e2e/networks_test.go

+ 6 - 0
pkg/compose/create.go

@@ -355,6 +355,11 @@ func (s *composeService) getCreateOptions(ctx context.Context, p *types.Project,
 		volumesFrom = append(volumesFrom, v[len("container:"):])
 	}
 
+	links, err := s.getLinks(ctx, p.Name, service, number)
+	if err != nil {
+		return nil, nil, nil, err
+	}
+
 	securityOpts, err := parseSecurityOpts(p, service.SecurityOpt)
 	if err != nil {
 		return nil, nil, nil, err
@@ -389,6 +394,7 @@ func (s *composeService) getCreateOptions(ctx context.Context, p *types.Project,
 		Runtime:        service.Runtime,
 		LogConfig:      logConfig,
 		GroupAdd:       service.GroupAdd,
+		Links:          links,
 	}
 
 	return &containerConfig, &hostConfig, networkConfig, nil

+ 9 - 0
pkg/e2e/fixtures/network-links/compose.yaml

@@ -0,0 +1,9 @@
+services:
+  container1:
+    image: nginx
+    network_mode: bridge
+  container2:
+    image: nginx
+    network_mode: bridge
+    links:
+      - container1

+ 20 - 1
pkg/e2e/networks_test.go

@@ -69,7 +69,7 @@ func TestNetworks(t *testing.T) {
 	})
 }
 
-func TestNetworkAliassesAndLinks(t *testing.T) {
+func TestNetworkAliasses(t *testing.T) {
 	c := NewParallelE2eCLI(t, binDir)
 
 	const projectName = "network_alias_e2e"
@@ -93,6 +93,25 @@ func TestNetworkAliassesAndLinks(t *testing.T) {
 	})
 }
 
+func TestNetworkLinks(t *testing.T) {
+	c := NewParallelE2eCLI(t, binDir)
+
+	const projectName = "network_link_e2e"
+
+	t.Run("up", func(t *testing.T) {
+		c.RunDockerComposeCmd("-f", "./fixtures/network-links/compose.yaml", "--project-name", projectName, "up", "-d")
+	})
+
+	t.Run("curl links in default bridge network", func(t *testing.T) {
+		res := c.RunDockerComposeCmd("-f", "./fixtures/network-links/compose.yaml", "--project-name", projectName, "exec", "-T", "container2", "curl", "http://container1/")
+		assert.Assert(t, strings.Contains(res.Stdout(), "Welcome to nginx!"), res.Stdout())
+	})
+
+	t.Run("down", func(t *testing.T) {
+		_ = c.RunDockerComposeCmd("--project-name", projectName, "down")
+	})
+}
+
 func TestIPAMConfig(t *testing.T) {
 	c := NewParallelE2eCLI(t, binDir)