reject compose file with bind mounts

Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>
This commit is contained in:
Nicolas De Loof 2025-03-04 15:49:59 +01:00 committed by Guillaume Lours
parent bcd000ab40
commit 4c2ecb542f
3 changed files with 20 additions and 0 deletions

View File

@ -155,6 +155,15 @@ func (s *composeService) preChecks(project *types.Project, options api.PublishOp
}
return acceptPublishEnvVariables(s.dockerCli)
}
for name, config := range project.Services {
for _, volume := range config.Volumes {
if volume.Type == types.VolumeTypeBind {
return false, fmt.Errorf("cannot publish compose file: service %q relies on bind-mount. You should use volumes", name)
}
}
}
return true, nil
}

View File

@ -0,0 +1,5 @@
services:
serviceA:
image: a
volumes:
- .:/user-data

View File

@ -108,6 +108,12 @@ FOO=bar`), res.Combined())
assert.Assert(t, strings.Contains(res.Combined(), `QUIX=`), res.Combined())
})
t.Run("refuse to publish with bind mount", func(t *testing.T) {
res := c.RunDockerComposeCmdNoCheck(t, "-f", "./fixtures/publish/compose-bind-mount.yml",
"-p", projectName, "alpha", "publish", "test/test", "--dry-run")
res.Assert(t, icmd.Expected{ExitCode: 1, Err: `cannot publish compose file: service "serviceA" relies on bind-mount. You should use volumes`})
})
t.Run("refuse to publish with build section only", func(t *testing.T) {
res := c.RunDockerComposeCmdNoCheck(t, "-f", "./fixtures/publish/compose-build-only.yml",
"-p", projectName, "alpha", "publish", "test/test", "--with-env", "-y", "--dry-run")