Skip to content

Commit

Permalink
fix for compatibility volume creation
Browse files Browse the repository at this point in the history
in the compatibility layer, creating a volume with a name that already does not result in an error.  instead a 201 response with the existing volume's information is returned. while it seems like a bug on the part of docker and they agree, no attempt has been made to fix it in five years.  See moby/moby#16068

Fixes: containers#7740

Signed-off-by: baude <bbaude@redhat.com>
  • Loading branch information
baude authored and mheon committed Oct 14, 2020
1 parent 1b5d945 commit 88efa04
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 1 deletion.
23 changes: 23 additions & 0 deletions pkg/api/handlers/compat/volumes.go
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,29 @@ func CreateVolume(w http.ResponseWriter, r *http.Request) {
return
}

// See if the volume exists already
existingVolume, err := runtime.GetVolume(input.Name)
if err != nil && errors.Cause(err) != define.ErrNoSuchVolume {
utils.InternalServerError(w, err)
return
}

// if using the compat layer and the volume already exists, we
// must return a 201 with the same information as create
if existingVolume != nil && !utils.IsLibpodRequest(r) {
response := docker_api_types.Volume{
CreatedAt: existingVolume.CreatedTime().Format(time.RFC3339),
Driver: existingVolume.Driver(),
Labels: existingVolume.Labels(),
Mountpoint: existingVolume.MountPoint(),
Name: existingVolume.Name(),
Options: existingVolume.Options(),
Scope: existingVolume.Scope(),
}
utils.WriteResponse(w, http.StatusCreated, response)
return
}

if len(input.Name) > 0 {
volumeOptions = append(volumeOptions, libpod.WithVolumeName(input.Name))
}
Expand Down
4 changes: 3 additions & 1 deletion pkg/api/server/register_volumes.go
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,9 @@ func (s *APIServer) registerVolumeHandlers(r *mux.Router) error {
// parameters:
// - in: body
// name: create
// description: attributes for creating a container
// description: |
// attributes for creating a container.
// Note: If a volume by the same name exists, a 201 response with that volume's information will be generated.
// schema:
// $ref: "#/definitions/DockerVolumeCreate"
// produces:
Expand Down

0 comments on commit 88efa04

Please sign in to comment.