소스 검색

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)