Merge pull request #22149 from vdemeester/deprecated-copy-endpoint

Deprecate /containers/(id or name)/copy endpoint
This commit is contained in:
Vincent Demeester 2016-06-07 12:50:04 +02:00
commit 148d2b8e4a
6 changed files with 40 additions and 39 deletions

View file

@ -62,7 +62,7 @@ func (r *containerRouter) initRoutes() {
router.NewPostRoute("/containers/{name:.*}/wait", r.postContainersWait),
router.NewPostRoute("/containers/{name:.*}/resize", r.postContainersResize),
router.NewPostRoute("/containers/{name:.*}/attach", r.postContainersAttach),
router.NewPostRoute("/containers/{name:.*}/copy", r.postContainersCopy),
router.NewPostRoute("/containers/{name:.*}/copy", r.postContainersCopy), // Deprecated since 1.8, Errors out since 1.12
router.NewPostRoute("/containers/{name:.*}/exec", r.postContainerExecCreate),
router.NewPostRoute("/exec/{name:.*}/start", r.postContainerExecStart),
router.NewPostRoute("/exec/{name:.*}/resize", r.postContainerExecResize),

View file

@ -11,11 +11,18 @@ import (
"github.com/docker/docker/api/server/httputils"
"github.com/docker/engine-api/types"
"github.com/docker/engine-api/types/versions"
"golang.org/x/net/context"
)
// postContainersCopy is deprecated in favor of getContainersArchive.
func (s *containerRouter) postContainersCopy(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
// Deprecated since 1.8, Errors out since 1.12
version := httputils.VersionFromContext(ctx)
if versions.GreaterThanOrEqualTo(version, "1.24") {
w.WriteHeader(http.StatusNotFound)
return nil
}
if err := httputils.CheckForJSON(r); err != nil {
return err
}

View file

@ -35,6 +35,14 @@ The docker login command is removing the ability to automatically register for a
The flag `--security-opt` doesn't use the colon separator(`:`) anymore to divide keys and values, it uses the equal symbol(`=`) for consinstency with other similar flags, like `--storage-opt`.
### `/containers/(id or name)/copy` endpoint
**Deprecated In Release: v1.8**
**Removed In Release: v1.12.0**
The endpoint `/containers/(id or name)/copy` is deprecated in favor of `/containers/(id or name)/archive`.
### Ambiguous event fields in API
**Deprecated In Release: [v1.10.0](https://github.com/docker/docker/releases/tag/v1.10.0)**

View file

@ -129,6 +129,7 @@ This section lists each version from latest to oldest. Each listing includes a
* `POST /containers/(id or name)/start` no longer accepts a `HostConfig`.
* `POST /images/(name)/tag` no longer has a `force` query parameter.
* `GET /images/search` now supports maximum returned search results `limit`.
* `POST /containers/{name:.*}/copy` is now removed and errors out starting from this API version.
### v1.23 API changes

View file

@ -1389,36 +1389,6 @@ Status Codes:
- **404** no such container
- **500** server error
### Copy files or folders from a container
`POST /containers/(id or name)/copy`
Copy files or folders of container `id`
**Deprecated** in favor of the `archive` endpoint below.
**Example request**:
POST /containers/4fa6e0f0c678/copy HTTP/1.1
Content-Type: application/json
{
"Resource": "test.txt"
}
**Example response**:
HTTP/1.1 200 OK
Content-Type: application/x-tar
{{ TAR STREAM }}
Status Codes:
- **200** no error
- **404** no such container
- **500** server error
### Retrieving information about files and folders in a container
`HEAD /containers/(id or name)/archive`

View file

@ -892,7 +892,7 @@ func (s *DockerSuite) TestContainerApiWait(c *check.C) {
c.Assert(waitres.StatusCode, checker.Equals, 0)
}
func (s *DockerSuite) TestContainerApiCopy(c *check.C) {
func (s *DockerSuite) TestContainerApiCopyNotExistsAnyMore(c *check.C) {
// TODO Windows to Windows CI. This can be ported.
testRequires(c, DaemonIsLinux)
name := "test-container-api-copy"
@ -902,7 +902,22 @@ func (s *DockerSuite) TestContainerApiCopy(c *check.C) {
Resource: "/test.txt",
}
status, body, err := sockRequest("POST", "/containers/"+name+"/copy", postData)
status, _, err := sockRequest("POST", "/containers/"+name+"/copy", postData)
c.Assert(err, checker.IsNil)
c.Assert(status, checker.Equals, http.StatusNotFound)
}
func (s *DockerSuite) TestContainerApiCopyPre124(c *check.C) {
// TODO Windows to Windows CI. This can be ported.
testRequires(c, DaemonIsLinux)
name := "test-container-api-copy"
dockerCmd(c, "run", "--name", name, "busybox", "touch", "/test.txt")
postData := types.CopyConfig{
Resource: "/test.txt",
}
status, body, err := sockRequest("POST", "/v1.23/containers/"+name+"/copy", postData)
c.Assert(err, checker.IsNil)
c.Assert(status, checker.Equals, http.StatusOK)
@ -923,7 +938,7 @@ func (s *DockerSuite) TestContainerApiCopy(c *check.C) {
c.Assert(found, checker.True)
}
func (s *DockerSuite) TestContainerApiCopyResourcePathEmpty(c *check.C) {
func (s *DockerSuite) TestContainerApiCopyResourcePathEmptyPr124(c *check.C) {
// TODO Windows to Windows CI. This can be ported.
testRequires(c, DaemonIsLinux)
name := "test-container-api-copy-resource-empty"
@ -933,13 +948,13 @@ func (s *DockerSuite) TestContainerApiCopyResourcePathEmpty(c *check.C) {
Resource: "",
}
status, body, err := sockRequest("POST", "/containers/"+name+"/copy", postData)
status, body, err := sockRequest("POST", "/v1.23/containers/"+name+"/copy", postData)
c.Assert(err, checker.IsNil)
c.Assert(status, checker.Equals, http.StatusInternalServerError)
c.Assert(string(body), checker.Matches, "Path cannot be empty\n")
}
func (s *DockerSuite) TestContainerApiCopyResourcePathNotFound(c *check.C) {
func (s *DockerSuite) TestContainerApiCopyResourcePathNotFoundPre124(c *check.C) {
// TODO Windows to Windows CI. This can be ported.
testRequires(c, DaemonIsLinux)
name := "test-container-api-copy-resource-not-found"
@ -949,18 +964,18 @@ func (s *DockerSuite) TestContainerApiCopyResourcePathNotFound(c *check.C) {
Resource: "/notexist",
}
status, body, err := sockRequest("POST", "/containers/"+name+"/copy", postData)
status, body, err := sockRequest("POST", "/v1.23/containers/"+name+"/copy", postData)
c.Assert(err, checker.IsNil)
c.Assert(status, checker.Equals, http.StatusInternalServerError)
c.Assert(string(body), checker.Matches, "Could not find the file /notexist in container "+name+"\n")
}
func (s *DockerSuite) TestContainerApiCopyContainerNotFound(c *check.C) {
func (s *DockerSuite) TestContainerApiCopyContainerNotFoundPr124(c *check.C) {
postData := types.CopyConfig{
Resource: "/something",
}
status, _, err := sockRequest("POST", "/containers/notexists/copy", postData)
status, _, err := sockRequest("POST", "/v1.23/containers/notexists/copy", postData)
c.Assert(err, checker.IsNil)
c.Assert(status, checker.Equals, http.StatusNotFound)
}