Kaynağa Gözat

Merge pull request #897 from docker/volume_conflict

Don't panic on bind mount
Guillaume Tardif 5 yıl önce
ebeveyn
işleme
949f0ce62e
2 değiştirilmiş dosya ile 14 ekleme ve 4 silme
  1. 2 2
      ecs/cloudformation.go
  2. 12 2
      ecs/compatibility.go

+ 2 - 2
ecs/cloudformation.go

@@ -385,13 +385,13 @@ func (b *ecsAPIService) createTaskRole(project *types.Project, service types.Ser
 	rolePolicies := []iam.Role_Policy{}
 	if roles, ok := service.Extensions[extensionRole]; ok {
 		rolePolicies = append(rolePolicies, iam.Role_Policy{
-			PolicyName:     fmt.Sprintf("%s%sPolicy", normalizeResourceName(project.Name), normalizeResourceName(service.Name)),
+			PolicyName:     fmt.Sprintf("%sPolicy", normalizeResourceName(service.Name)),
 			PolicyDocument: roles,
 		})
 	}
 	for _, vol := range service.Volumes {
 		rolePolicies = append(rolePolicies, iam.Role_Policy{
-			PolicyName:     fmt.Sprintf("%s%sVolumeMountPolicy", normalizeResourceName(project.Name), normalizeResourceName(service.Name)),
+			PolicyName:     fmt.Sprintf("%s%sVolumeMountPolicy", normalizeResourceName(service.Name), normalizeResourceName(vol.Source)),
 			PolicyDocument: volumeMountPolicyDocument(vol.Source, resources.filesystems[vol.Source].ARN()),
 		})
 	}

+ 12 - 2
ecs/compatibility.go

@@ -27,9 +27,10 @@ import (
 
 func (b *ecsAPIService) checkCompatibility(project *types.Project) error {
 	var checker compatibility.Checker = &fargateCompatibilityChecker{
-		compatibility.AllowList{
+		AllowList: compatibility.AllowList{
 			Supported: compatibleComposeAttributes,
 		},
+		projet: project,
 	}
 	compatibility.Check(project, checker)
 	for _, err := range checker.Errors() {
@@ -46,6 +47,7 @@ func (b *ecsAPIService) checkCompatibility(project *types.Project) error {
 
 type fargateCompatibilityChecker struct {
 	compatibility.AllowList
+	projet *types.Project
 }
 
 var compatibleComposeAttributes = []string{
@@ -91,7 +93,6 @@ var compatibleComposeAttributes = []string{
 	"services.user",
 	"services.volumes",
 	"services.volumes.read_only",
-	"services.volumes.source",
 	"services.volumes.target",
 	"services.working_dir",
 	"secrets.external",
@@ -120,6 +121,15 @@ func (c *fargateCompatibilityChecker) CheckPortsPublished(p *types.ServicePortCo
 	}
 }
 
+func (c *fargateCompatibilityChecker) CheckVolumesSource(config *types.ServiceVolumeConfig) {
+	if config.Type == types.VolumeTypeBind {
+		c.Incompatible("ECS Fargate does not support bind mounts from host")
+	}
+	if config.Type == types.VolumeTypeTmpfs {
+		c.Incompatible("ECS Fargate does not support tmpfs")
+	}
+}
+
 func (c *fargateCompatibilityChecker) CheckCapAdd(service *types.ServiceConfig) {
 	add := []string{}
 	for _, cap := range service.CapAdd {