mirror of https://github.com/docker/cli.git
Merge pull request #5226 from thaJeztah/bump_engine_temp
vendor: github.com/docker/docker 508cc7c61226 (master)
This commit is contained in:
commit
5aae44baaa
|
@ -4,7 +4,6 @@ import (
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
"github.com/docker/cli/cli/command/formatter"
|
"github.com/docker/cli/cli/command/formatter"
|
||||||
"github.com/docker/docker/api/types"
|
|
||||||
"github.com/docker/docker/api/types/container"
|
"github.com/docker/docker/api/types/container"
|
||||||
"github.com/docker/docker/api/types/image"
|
"github.com/docker/docker/api/types/image"
|
||||||
"github.com/docker/docker/api/types/network"
|
"github.com/docker/docker/api/types/network"
|
||||||
|
@ -44,7 +43,7 @@ func ImageNames(dockerCLI APIClientProvider) ValidArgsFn {
|
||||||
// ContainerNames offers completion for container names and IDs
|
// ContainerNames offers completion for container names and IDs
|
||||||
// By default, only names are returned.
|
// By default, only names are returned.
|
||||||
// Set DOCKER_COMPLETION_SHOW_CONTAINER_IDS=yes to also complete IDs.
|
// Set DOCKER_COMPLETION_SHOW_CONTAINER_IDS=yes to also complete IDs.
|
||||||
func ContainerNames(dockerCLI APIClientProvider, all bool, filters ...func(types.Container) bool) ValidArgsFn {
|
func ContainerNames(dockerCLI APIClientProvider, all bool, filters ...func(container.Summary) bool) ValidArgsFn {
|
||||||
return func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
|
return func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
|
||||||
list, err := dockerCLI.Client().ContainerList(cmd.Context(), container.ListOptions{
|
list, err := dockerCLI.Client().ContainerList(cmd.Context(), container.ListOptions{
|
||||||
All: all,
|
All: all,
|
||||||
|
|
|
@ -7,7 +7,6 @@ import (
|
||||||
"github.com/docker/cli/cli"
|
"github.com/docker/cli/cli"
|
||||||
"github.com/docker/cli/cli/command"
|
"github.com/docker/cli/cli/command"
|
||||||
"github.com/docker/cli/cli/command/completion"
|
"github.com/docker/cli/cli/command/completion"
|
||||||
"github.com/docker/docker/api/types"
|
|
||||||
"github.com/docker/docker/api/types/container"
|
"github.com/docker/docker/api/types/container"
|
||||||
"github.com/docker/docker/client"
|
"github.com/docker/docker/client"
|
||||||
"github.com/moby/sys/signal"
|
"github.com/moby/sys/signal"
|
||||||
|
@ -23,7 +22,7 @@ type AttachOptions struct {
|
||||||
DetachKeys string
|
DetachKeys string
|
||||||
}
|
}
|
||||||
|
|
||||||
func inspectContainerAndCheckState(ctx context.Context, apiClient client.APIClient, args string) (*types.ContainerJSON, error) {
|
func inspectContainerAndCheckState(ctx context.Context, apiClient client.APIClient, args string) (*container.InspectResponse, error) {
|
||||||
c, err := apiClient.ContainerInspect(ctx, args)
|
c, err := apiClient.ContainerInspect(ctx, args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -56,7 +55,7 @@ func NewAttachCommand(dockerCLI command.Cli) *cobra.Command {
|
||||||
Annotations: map[string]string{
|
Annotations: map[string]string{
|
||||||
"aliases": "docker container attach, docker attach",
|
"aliases": "docker container attach, docker attach",
|
||||||
},
|
},
|
||||||
ValidArgsFunction: completion.ContainerNames(dockerCLI, false, func(ctr types.Container) bool {
|
ValidArgsFunction: completion.ContainerNames(dockerCLI, false, func(ctr container.Summary) bool {
|
||||||
return ctr.State != "paused"
|
return ctr.State != "paused"
|
||||||
}),
|
}),
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,7 +6,6 @@ import (
|
||||||
|
|
||||||
"github.com/docker/cli/cli"
|
"github.com/docker/cli/cli"
|
||||||
"github.com/docker/cli/internal/test"
|
"github.com/docker/cli/internal/test"
|
||||||
"github.com/docker/docker/api/types"
|
|
||||||
"github.com/docker/docker/api/types/container"
|
"github.com/docker/docker/api/types/container"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"gotest.tools/v3/assert"
|
"gotest.tools/v3/assert"
|
||||||
|
@ -17,24 +16,24 @@ func TestNewAttachCommandErrors(t *testing.T) {
|
||||||
name string
|
name string
|
||||||
args []string
|
args []string
|
||||||
expectedError string
|
expectedError string
|
||||||
containerInspectFunc func(img string) (types.ContainerJSON, error)
|
containerInspectFunc func(img string) (container.InspectResponse, error)
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "client-error",
|
name: "client-error",
|
||||||
args: []string{"5cb5bb5e4a3b"},
|
args: []string{"5cb5bb5e4a3b"},
|
||||||
expectedError: "something went wrong",
|
expectedError: "something went wrong",
|
||||||
containerInspectFunc: func(containerID string) (types.ContainerJSON, error) {
|
containerInspectFunc: func(containerID string) (container.InspectResponse, error) {
|
||||||
return types.ContainerJSON{}, errors.Errorf("something went wrong")
|
return container.InspectResponse{}, errors.Errorf("something went wrong")
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "client-stopped",
|
name: "client-stopped",
|
||||||
args: []string{"5cb5bb5e4a3b"},
|
args: []string{"5cb5bb5e4a3b"},
|
||||||
expectedError: "You cannot attach to a stopped container",
|
expectedError: "You cannot attach to a stopped container",
|
||||||
containerInspectFunc: func(containerID string) (types.ContainerJSON, error) {
|
containerInspectFunc: func(containerID string) (container.InspectResponse, error) {
|
||||||
return types.ContainerJSON{
|
return container.InspectResponse{
|
||||||
ContainerJSONBase: &types.ContainerJSONBase{
|
ContainerJSONBase: &container.ContainerJSONBase{
|
||||||
State: &types.ContainerState{
|
State: &container.State{
|
||||||
Running: false,
|
Running: false,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -45,10 +44,10 @@ func TestNewAttachCommandErrors(t *testing.T) {
|
||||||
name: "client-paused",
|
name: "client-paused",
|
||||||
args: []string{"5cb5bb5e4a3b"},
|
args: []string{"5cb5bb5e4a3b"},
|
||||||
expectedError: "You cannot attach to a paused container",
|
expectedError: "You cannot attach to a paused container",
|
||||||
containerInspectFunc: func(containerID string) (types.ContainerJSON, error) {
|
containerInspectFunc: func(containerID string) (container.InspectResponse, error) {
|
||||||
return types.ContainerJSON{
|
return container.InspectResponse{
|
||||||
ContainerJSONBase: &types.ContainerJSONBase{
|
ContainerJSONBase: &container.ContainerJSONBase{
|
||||||
State: &types.ContainerState{
|
State: &container.State{
|
||||||
Running: true,
|
Running: true,
|
||||||
Paused: true,
|
Paused: true,
|
||||||
},
|
},
|
||||||
|
@ -60,10 +59,10 @@ func TestNewAttachCommandErrors(t *testing.T) {
|
||||||
name: "client-restarting",
|
name: "client-restarting",
|
||||||
args: []string{"5cb5bb5e4a3b"},
|
args: []string{"5cb5bb5e4a3b"},
|
||||||
expectedError: "You cannot attach to a restarting container",
|
expectedError: "You cannot attach to a restarting container",
|
||||||
containerInspectFunc: func(containerID string) (types.ContainerJSON, error) {
|
containerInspectFunc: func(containerID string) (container.InspectResponse, error) {
|
||||||
return types.ContainerJSON{
|
return container.InspectResponse{
|
||||||
ContainerJSONBase: &types.ContainerJSONBase{
|
ContainerJSONBase: &container.ContainerJSONBase{
|
||||||
State: &types.ContainerState{
|
State: &container.State{
|
||||||
Running: true,
|
Running: true,
|
||||||
Paused: false,
|
Paused: false,
|
||||||
Restarting: true,
|
Restarting: true,
|
||||||
|
|
|
@ -16,7 +16,7 @@ import (
|
||||||
|
|
||||||
type fakeClient struct {
|
type fakeClient struct {
|
||||||
client.Client
|
client.Client
|
||||||
inspectFunc func(string) (types.ContainerJSON, error)
|
inspectFunc func(string) (container.InspectResponse, error)
|
||||||
execInspectFunc func(execID string) (container.ExecInspect, error)
|
execInspectFunc func(execID string) (container.ExecInspect, error)
|
||||||
execCreateFunc func(containerID string, options container.ExecOptions) (types.IDResponse, error)
|
execCreateFunc func(containerID string, options container.ExecOptions) (types.IDResponse, error)
|
||||||
createContainerFunc func(config *container.Config,
|
createContainerFunc func(config *container.Config,
|
||||||
|
@ -31,7 +31,7 @@ type fakeClient struct {
|
||||||
containerCopyFromFunc func(containerID, srcPath string) (io.ReadCloser, container.PathStat, error)
|
containerCopyFromFunc func(containerID, srcPath string) (io.ReadCloser, container.PathStat, error)
|
||||||
logFunc func(string, container.LogsOptions) (io.ReadCloser, error)
|
logFunc func(string, container.LogsOptions) (io.ReadCloser, error)
|
||||||
waitFunc func(string) (<-chan container.WaitResponse, <-chan error)
|
waitFunc func(string) (<-chan container.WaitResponse, <-chan error)
|
||||||
containerListFunc func(container.ListOptions) ([]types.Container, error)
|
containerListFunc func(container.ListOptions) ([]container.Summary, error)
|
||||||
containerExportFunc func(string) (io.ReadCloser, error)
|
containerExportFunc func(string) (io.ReadCloser, error)
|
||||||
containerExecResizeFunc func(id string, options container.ResizeOptions) error
|
containerExecResizeFunc func(id string, options container.ResizeOptions) error
|
||||||
containerRemoveFunc func(ctx context.Context, containerID string, options container.RemoveOptions) error
|
containerRemoveFunc func(ctx context.Context, containerID string, options container.RemoveOptions) error
|
||||||
|
@ -41,18 +41,18 @@ type fakeClient struct {
|
||||||
Version string
|
Version string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *fakeClient) ContainerList(_ context.Context, options container.ListOptions) ([]types.Container, error) {
|
func (f *fakeClient) ContainerList(_ context.Context, options container.ListOptions) ([]container.Summary, error) {
|
||||||
if f.containerListFunc != nil {
|
if f.containerListFunc != nil {
|
||||||
return f.containerListFunc(options)
|
return f.containerListFunc(options)
|
||||||
}
|
}
|
||||||
return []types.Container{}, nil
|
return []container.Summary{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *fakeClient) ContainerInspect(_ context.Context, containerID string) (types.ContainerJSON, error) {
|
func (f *fakeClient) ContainerInspect(_ context.Context, containerID string) (container.InspectResponse, error) {
|
||||||
if f.inspectFunc != nil {
|
if f.inspectFunc != nil {
|
||||||
return f.inspectFunc(containerID)
|
return f.inspectFunc(containerID)
|
||||||
}
|
}
|
||||||
return types.ContainerJSON{}, nil
|
return container.InspectResponse{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *fakeClient) ContainerExecCreate(_ context.Context, containerID string, config container.ExecOptions) (types.IDResponse, error) {
|
func (f *fakeClient) ContainerExecCreate(_ context.Context, containerID string, config container.ExecOptions) (types.IDResponse, error) {
|
||||||
|
|
|
@ -11,7 +11,6 @@ import (
|
||||||
"github.com/docker/cli/cli/command/completion"
|
"github.com/docker/cli/cli/command/completion"
|
||||||
"github.com/docker/cli/cli/config/configfile"
|
"github.com/docker/cli/cli/config/configfile"
|
||||||
"github.com/docker/cli/opts"
|
"github.com/docker/cli/opts"
|
||||||
"github.com/docker/docker/api/types"
|
|
||||||
"github.com/docker/docker/api/types/container"
|
"github.com/docker/docker/api/types/container"
|
||||||
"github.com/docker/docker/client"
|
"github.com/docker/docker/client"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
|
@ -54,7 +53,7 @@ func NewExecCommand(dockerCli command.Cli) *cobra.Command {
|
||||||
options.Command = args[1:]
|
options.Command = args[1:]
|
||||||
return RunExec(cmd.Context(), dockerCli, containerIDorName, options)
|
return RunExec(cmd.Context(), dockerCli, containerIDorName, options)
|
||||||
},
|
},
|
||||||
ValidArgsFunction: completion.ContainerNames(dockerCli, false, func(ctr types.Container) bool {
|
ValidArgsFunction: completion.ContainerNames(dockerCli, false, func(ctr container.Summary) bool {
|
||||||
return ctr.State != "paused"
|
return ctr.State != "paused"
|
||||||
}),
|
}),
|
||||||
Annotations: map[string]string{
|
Annotations: map[string]string{
|
||||||
|
|
|
@ -178,8 +178,8 @@ func TestRunExec(t *testing.T) {
|
||||||
doc: "inspect error",
|
doc: "inspect error",
|
||||||
options: NewExecOptions(),
|
options: NewExecOptions(),
|
||||||
client: &fakeClient{
|
client: &fakeClient{
|
||||||
inspectFunc: func(string) (types.ContainerJSON, error) {
|
inspectFunc: func(string) (container.InspectResponse, error) {
|
||||||
return types.ContainerJSON{}, errors.New("failed inspect")
|
return container.InspectResponse{}, errors.New("failed inspect")
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
expectedError: "failed inspect",
|
expectedError: "failed inspect",
|
||||||
|
@ -252,14 +252,14 @@ func TestNewExecCommandErrors(t *testing.T) {
|
||||||
name string
|
name string
|
||||||
args []string
|
args []string
|
||||||
expectedError string
|
expectedError string
|
||||||
containerInspectFunc func(img string) (types.ContainerJSON, error)
|
containerInspectFunc func(img string) (container.InspectResponse, error)
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "client-error",
|
name: "client-error",
|
||||||
args: []string{"5cb5bb5e4a3b", "-t", "-i", "bash"},
|
args: []string{"5cb5bb5e4a3b", "-t", "-i", "bash"},
|
||||||
expectedError: "something went wrong",
|
expectedError: "something went wrong",
|
||||||
containerInspectFunc: func(containerID string) (types.ContainerJSON, error) {
|
containerInspectFunc: func(containerID string) (container.InspectResponse, error) {
|
||||||
return types.ContainerJSON{}, errors.Errorf("something went wrong")
|
return container.InspectResponse{}, errors.Errorf("something went wrong")
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,6 @@ import (
|
||||||
"github.com/docker/cli/internal/test"
|
"github.com/docker/cli/internal/test"
|
||||||
"github.com/docker/cli/internal/test/builders"
|
"github.com/docker/cli/internal/test/builders"
|
||||||
"github.com/docker/cli/opts"
|
"github.com/docker/cli/opts"
|
||||||
"github.com/docker/docker/api/types"
|
|
||||||
"github.com/docker/docker/api/types/container"
|
"github.com/docker/docker/api/types/container"
|
||||||
"gotest.tools/v3/assert"
|
"gotest.tools/v3/assert"
|
||||||
is "gotest.tools/v3/assert/cmp"
|
is "gotest.tools/v3/assert/cmp"
|
||||||
|
@ -130,7 +129,7 @@ func TestContainerListErrors(t *testing.T) {
|
||||||
testCases := []struct {
|
testCases := []struct {
|
||||||
args []string
|
args []string
|
||||||
flags map[string]string
|
flags map[string]string
|
||||||
containerListFunc func(container.ListOptions) ([]types.Container, error)
|
containerListFunc func(container.ListOptions) ([]container.Summary, error)
|
||||||
expectedError string
|
expectedError string
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
|
@ -146,7 +145,7 @@ func TestContainerListErrors(t *testing.T) {
|
||||||
expectedError: `wrong number of args for join`,
|
expectedError: `wrong number of args for join`,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
containerListFunc: func(_ container.ListOptions) ([]types.Container, error) {
|
containerListFunc: func(_ container.ListOptions) ([]container.Summary, error) {
|
||||||
return nil, errors.New("error listing containers")
|
return nil, errors.New("error listing containers")
|
||||||
},
|
},
|
||||||
expectedError: "error listing containers",
|
expectedError: "error listing containers",
|
||||||
|
@ -170,8 +169,8 @@ func TestContainerListErrors(t *testing.T) {
|
||||||
|
|
||||||
func TestContainerListWithoutFormat(t *testing.T) {
|
func TestContainerListWithoutFormat(t *testing.T) {
|
||||||
cli := test.NewFakeCli(&fakeClient{
|
cli := test.NewFakeCli(&fakeClient{
|
||||||
containerListFunc: func(_ container.ListOptions) ([]types.Container, error) {
|
containerListFunc: func(_ container.ListOptions) ([]container.Summary, error) {
|
||||||
return []types.Container{
|
return []container.Summary{
|
||||||
*builders.Container("c1"),
|
*builders.Container("c1"),
|
||||||
*builders.Container("c2", builders.WithName("foo")),
|
*builders.Container("c2", builders.WithName("foo")),
|
||||||
*builders.Container("c3", builders.WithPort(80, 80, builders.TCP), builders.WithPort(81, 81, builders.TCP), builders.WithPort(82, 82, builders.TCP)),
|
*builders.Container("c3", builders.WithPort(80, 80, builders.TCP), builders.WithPort(81, 81, builders.TCP), builders.WithPort(82, 82, builders.TCP)),
|
||||||
|
@ -187,8 +186,8 @@ func TestContainerListWithoutFormat(t *testing.T) {
|
||||||
|
|
||||||
func TestContainerListNoTrunc(t *testing.T) {
|
func TestContainerListNoTrunc(t *testing.T) {
|
||||||
cli := test.NewFakeCli(&fakeClient{
|
cli := test.NewFakeCli(&fakeClient{
|
||||||
containerListFunc: func(_ container.ListOptions) ([]types.Container, error) {
|
containerListFunc: func(_ container.ListOptions) ([]container.Summary, error) {
|
||||||
return []types.Container{
|
return []container.Summary{
|
||||||
*builders.Container("c1"),
|
*builders.Container("c1"),
|
||||||
*builders.Container("c2", builders.WithName("foo/bar")),
|
*builders.Container("c2", builders.WithName("foo/bar")),
|
||||||
}, nil
|
}, nil
|
||||||
|
@ -203,8 +202,8 @@ func TestContainerListNoTrunc(t *testing.T) {
|
||||||
// Test for GitHub issue docker/docker#21772
|
// Test for GitHub issue docker/docker#21772
|
||||||
func TestContainerListNamesMultipleTime(t *testing.T) {
|
func TestContainerListNamesMultipleTime(t *testing.T) {
|
||||||
cli := test.NewFakeCli(&fakeClient{
|
cli := test.NewFakeCli(&fakeClient{
|
||||||
containerListFunc: func(_ container.ListOptions) ([]types.Container, error) {
|
containerListFunc: func(_ container.ListOptions) ([]container.Summary, error) {
|
||||||
return []types.Container{
|
return []container.Summary{
|
||||||
*builders.Container("c1"),
|
*builders.Container("c1"),
|
||||||
*builders.Container("c2", builders.WithName("foo/bar")),
|
*builders.Container("c2", builders.WithName("foo/bar")),
|
||||||
}, nil
|
}, nil
|
||||||
|
@ -219,8 +218,8 @@ func TestContainerListNamesMultipleTime(t *testing.T) {
|
||||||
// Test for GitHub issue docker/docker#30291
|
// Test for GitHub issue docker/docker#30291
|
||||||
func TestContainerListFormatTemplateWithArg(t *testing.T) {
|
func TestContainerListFormatTemplateWithArg(t *testing.T) {
|
||||||
cli := test.NewFakeCli(&fakeClient{
|
cli := test.NewFakeCli(&fakeClient{
|
||||||
containerListFunc: func(_ container.ListOptions) ([]types.Container, error) {
|
containerListFunc: func(_ container.ListOptions) ([]container.Summary, error) {
|
||||||
return []types.Container{
|
return []container.Summary{
|
||||||
*builders.Container("c1", builders.WithLabel("some.label", "value")),
|
*builders.Container("c1", builders.WithLabel("some.label", "value")),
|
||||||
*builders.Container("c2", builders.WithName("foo/bar"), builders.WithLabel("foo", "bar")),
|
*builders.Container("c2", builders.WithName("foo/bar"), builders.WithLabel("foo", "bar")),
|
||||||
}, nil
|
}, nil
|
||||||
|
@ -270,9 +269,9 @@ func TestContainerListFormatSizeSetsOption(t *testing.T) {
|
||||||
tc := tc
|
tc := tc
|
||||||
t.Run(tc.doc, func(t *testing.T) {
|
t.Run(tc.doc, func(t *testing.T) {
|
||||||
cli := test.NewFakeCli(&fakeClient{
|
cli := test.NewFakeCli(&fakeClient{
|
||||||
containerListFunc: func(options container.ListOptions) ([]types.Container, error) {
|
containerListFunc: func(options container.ListOptions) ([]container.Summary, error) {
|
||||||
assert.Check(t, is.Equal(options.Size, tc.sizeExpected))
|
assert.Check(t, is.Equal(options.Size, tc.sizeExpected))
|
||||||
return []types.Container{}, nil
|
return []container.Summary{}, nil
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
cmd := newListCommand(cli)
|
cmd := newListCommand(cli)
|
||||||
|
@ -287,8 +286,8 @@ func TestContainerListFormatSizeSetsOption(t *testing.T) {
|
||||||
|
|
||||||
func TestContainerListWithConfigFormat(t *testing.T) {
|
func TestContainerListWithConfigFormat(t *testing.T) {
|
||||||
cli := test.NewFakeCli(&fakeClient{
|
cli := test.NewFakeCli(&fakeClient{
|
||||||
containerListFunc: func(_ container.ListOptions) ([]types.Container, error) {
|
containerListFunc: func(_ container.ListOptions) ([]container.Summary, error) {
|
||||||
return []types.Container{
|
return []container.Summary{
|
||||||
*builders.Container("c1", builders.WithLabel("some.label", "value"), builders.WithSize(10700000)),
|
*builders.Container("c1", builders.WithLabel("some.label", "value"), builders.WithSize(10700000)),
|
||||||
*builders.Container("c2", builders.WithName("foo/bar"), builders.WithLabel("foo", "bar"), builders.WithSize(3200000)),
|
*builders.Container("c2", builders.WithName("foo/bar"), builders.WithLabel("foo", "bar"), builders.WithSize(3200000)),
|
||||||
}, nil
|
}, nil
|
||||||
|
@ -304,8 +303,8 @@ func TestContainerListWithConfigFormat(t *testing.T) {
|
||||||
|
|
||||||
func TestContainerListWithFormat(t *testing.T) {
|
func TestContainerListWithFormat(t *testing.T) {
|
||||||
cli := test.NewFakeCli(&fakeClient{
|
cli := test.NewFakeCli(&fakeClient{
|
||||||
containerListFunc: func(_ container.ListOptions) ([]types.Container, error) {
|
containerListFunc: func(_ container.ListOptions) ([]container.Summary, error) {
|
||||||
return []types.Container{
|
return []container.Summary{
|
||||||
*builders.Container("c1", builders.WithLabel("some.label", "value")),
|
*builders.Container("c1", builders.WithLabel("some.label", "value")),
|
||||||
*builders.Container("c2", builders.WithName("foo/bar"), builders.WithLabel("foo", "bar")),
|
*builders.Container("c2", builders.WithName("foo/bar"), builders.WithLabel("foo", "bar")),
|
||||||
}, nil
|
}, nil
|
||||||
|
|
|
@ -7,7 +7,6 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/docker/cli/internal/test"
|
"github.com/docker/cli/internal/test"
|
||||||
"github.com/docker/docker/api/types"
|
|
||||||
"github.com/docker/docker/api/types/container"
|
"github.com/docker/docker/api/types/container"
|
||||||
"gotest.tools/v3/assert"
|
"gotest.tools/v3/assert"
|
||||||
is "gotest.tools/v3/assert/cmp"
|
is "gotest.tools/v3/assert/cmp"
|
||||||
|
@ -20,10 +19,10 @@ var logFn = func(expectedOut string) func(string, container.LogsOptions) (io.Rea
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRunLogs(t *testing.T) {
|
func TestRunLogs(t *testing.T) {
|
||||||
inspectFn := func(containerID string) (types.ContainerJSON, error) {
|
inspectFn := func(containerID string) (container.InspectResponse, error) {
|
||||||
return types.ContainerJSON{
|
return container.InspectResponse{
|
||||||
Config: &container.Config{Tty: true},
|
Config: &container.Config{Tty: true},
|
||||||
ContainerJSONBase: &types.ContainerJSONBase{State: &types.ContainerState{Running: false}},
|
ContainerJSONBase: &container.ContainerJSONBase{State: &container.State{Running: false}},
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@ import (
|
||||||
"github.com/docker/cli/cli"
|
"github.com/docker/cli/cli"
|
||||||
"github.com/docker/cli/cli/command"
|
"github.com/docker/cli/cli/command"
|
||||||
"github.com/docker/cli/cli/command/completion"
|
"github.com/docker/cli/cli/command/completion"
|
||||||
"github.com/docker/docker/api/types"
|
"github.com/docker/docker/api/types/container"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
)
|
)
|
||||||
|
@ -32,7 +32,7 @@ func NewPauseCommand(dockerCli command.Cli) *cobra.Command {
|
||||||
Annotations: map[string]string{
|
Annotations: map[string]string{
|
||||||
"aliases": "docker container pause, docker pause",
|
"aliases": "docker container pause, docker pause",
|
||||||
},
|
},
|
||||||
ValidArgsFunction: completion.ContainerNames(dockerCli, false, func(ctr types.Container) bool {
|
ValidArgsFunction: completion.ContainerNames(dockerCli, false, func(ctr container.Summary) bool {
|
||||||
return ctr.State != "paused"
|
return ctr.State != "paused"
|
||||||
}),
|
}),
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,7 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/docker/cli/internal/test"
|
"github.com/docker/cli/internal/test"
|
||||||
"github.com/docker/docker/api/types"
|
"github.com/docker/docker/api/types/container"
|
||||||
"github.com/docker/go-connections/nat"
|
"github.com/docker/go-connections/nat"
|
||||||
"gotest.tools/v3/assert"
|
"gotest.tools/v3/assert"
|
||||||
"gotest.tools/v3/golden"
|
"gotest.tools/v3/golden"
|
||||||
|
@ -46,8 +46,8 @@ func TestNewPortCommandOutput(t *testing.T) {
|
||||||
tc := tc
|
tc := tc
|
||||||
t.Run(tc.name, func(t *testing.T) {
|
t.Run(tc.name, func(t *testing.T) {
|
||||||
cli := test.NewFakeCli(&fakeClient{
|
cli := test.NewFakeCli(&fakeClient{
|
||||||
inspectFunc: func(string) (types.ContainerJSON, error) {
|
inspectFunc: func(string) (container.InspectResponse, error) {
|
||||||
ci := types.ContainerJSON{NetworkSettings: &types.NetworkSettings{}}
|
ci := container.InspectResponse{NetworkSettings: &container.NetworkSettings{}}
|
||||||
ci.NetworkSettings.Ports = nat.PortMap{
|
ci.NetworkSettings.Ports = nat.PortMap{
|
||||||
"80/tcp": make([]nat.PortBinding, len(tc.ips)),
|
"80/tcp": make([]nat.PortBinding, len(tc.ips)),
|
||||||
"443/tcp": make([]nat.PortBinding, len(tc.ips)),
|
"443/tcp": make([]nat.PortBinding, len(tc.ips)),
|
||||||
|
|
|
@ -9,7 +9,6 @@ import (
|
||||||
"github.com/docker/cli/cli"
|
"github.com/docker/cli/cli"
|
||||||
"github.com/docker/cli/cli/command"
|
"github.com/docker/cli/cli/command"
|
||||||
"github.com/docker/cli/cli/command/completion"
|
"github.com/docker/cli/cli/command/completion"
|
||||||
"github.com/docker/docker/api/types"
|
|
||||||
"github.com/docker/docker/api/types/container"
|
"github.com/docker/docker/api/types/container"
|
||||||
"github.com/moby/sys/signal"
|
"github.com/moby/sys/signal"
|
||||||
"github.com/moby/term"
|
"github.com/moby/term"
|
||||||
|
@ -43,7 +42,7 @@ func NewStartCommand(dockerCli command.Cli) *cobra.Command {
|
||||||
Annotations: map[string]string{
|
Annotations: map[string]string{
|
||||||
"aliases": "docker container start, docker start",
|
"aliases": "docker container start, docker start",
|
||||||
},
|
},
|
||||||
ValidArgsFunction: completion.ContainerNames(dockerCli, true, func(ctr types.Container) bool {
|
ValidArgsFunction: completion.ContainerNames(dockerCli, true, func(ctr container.Summary) bool {
|
||||||
return ctr.State == "exited" || ctr.State == "created"
|
return ctr.State == "exited" || ctr.State == "created"
|
||||||
}),
|
}),
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,7 +8,7 @@ import (
|
||||||
"github.com/docker/cli/cli"
|
"github.com/docker/cli/cli"
|
||||||
"github.com/docker/cli/cli/command"
|
"github.com/docker/cli/cli/command"
|
||||||
"github.com/docker/cli/cli/command/completion"
|
"github.com/docker/cli/cli/command/completion"
|
||||||
"github.com/docker/docker/api/types"
|
"github.com/docker/docker/api/types/container"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
)
|
)
|
||||||
|
@ -32,7 +32,7 @@ func NewUnpauseCommand(dockerCli command.Cli) *cobra.Command {
|
||||||
Annotations: map[string]string{
|
Annotations: map[string]string{
|
||||||
"aliases": "docker container unpause, docker unpause",
|
"aliases": "docker container unpause, docker unpause",
|
||||||
},
|
},
|
||||||
ValidArgsFunction: completion.ContainerNames(dockerCli, false, func(ctr types.Container) bool {
|
ValidArgsFunction: completion.ContainerNames(dockerCli, false, func(ctr container.Summary) bool {
|
||||||
return ctr.State == "paused"
|
return ctr.State == "paused"
|
||||||
}),
|
}),
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,7 @@ import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/distribution/reference"
|
"github.com/distribution/reference"
|
||||||
"github.com/docker/docker/api/types"
|
"github.com/docker/docker/api/types/container"
|
||||||
"github.com/docker/docker/pkg/stringid"
|
"github.com/docker/docker/pkg/stringid"
|
||||||
"github.com/docker/go-units"
|
"github.com/docker/go-units"
|
||||||
)
|
)
|
||||||
|
@ -66,7 +66,7 @@ ports: {{- pad .Ports 1 0}}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ContainerWrite renders the context for a list of containers
|
// ContainerWrite renders the context for a list of containers
|
||||||
func ContainerWrite(ctx Context, containers []types.Container) error {
|
func ContainerWrite(ctx Context, containers []container.Summary) error {
|
||||||
render := func(format func(subContext SubContext) error) error {
|
render := func(format func(subContext SubContext) error) error {
|
||||||
for _, ctr := range containers {
|
for _, ctr := range containers {
|
||||||
err := format(&ContainerContext{trunc: ctx.Trunc, c: ctr})
|
err := format(&ContainerContext{trunc: ctx.Trunc, c: ctr})
|
||||||
|
@ -83,7 +83,7 @@ func ContainerWrite(ctx Context, containers []types.Container) error {
|
||||||
type ContainerContext struct {
|
type ContainerContext struct {
|
||||||
HeaderContext
|
HeaderContext
|
||||||
trunc bool
|
trunc bool
|
||||||
c types.Container
|
c container.Summary
|
||||||
|
|
||||||
// FieldsUsed is used in the pre-processing step to detect which fields are
|
// FieldsUsed is used in the pre-processing step to detect which fields are
|
||||||
// used in the template. It's currently only used to detect use of the .Size
|
// used in the template. It's currently only used to detect use of the .Size
|
||||||
|
@ -313,7 +313,7 @@ func (c *ContainerContext) Networks() string {
|
||||||
// DisplayablePorts returns formatted string representing open ports of container
|
// DisplayablePorts returns formatted string representing open ports of container
|
||||||
// e.g. "0.0.0.0:80->9090/tcp, 9988/tcp"
|
// e.g. "0.0.0.0:80->9090/tcp, 9988/tcp"
|
||||||
// it's used by command 'docker ps'
|
// it's used by command 'docker ps'
|
||||||
func DisplayablePorts(ports []types.Port) string {
|
func DisplayablePorts(ports []container.Port) string {
|
||||||
type portGroup struct {
|
type portGroup struct {
|
||||||
first uint16
|
first uint16
|
||||||
last uint16
|
last uint16
|
||||||
|
@ -378,7 +378,7 @@ func formGroup(key string, start, last uint16) string {
|
||||||
return group + "/" + groupType
|
return group + "/" + groupType
|
||||||
}
|
}
|
||||||
|
|
||||||
func comparePorts(i, j types.Port) bool {
|
func comparePorts(i, j container.Port) bool {
|
||||||
if i.PrivatePort != j.PrivatePort {
|
if i.PrivatePort != j.PrivatePort {
|
||||||
return i.PrivatePort < j.PrivatePort
|
return i.PrivatePort < j.PrivatePort
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,7 +12,7 @@ import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/docker/cli/internal/test"
|
"github.com/docker/cli/internal/test"
|
||||||
"github.com/docker/docker/api/types"
|
"github.com/docker/docker/api/types/container"
|
||||||
"github.com/docker/docker/pkg/stringid"
|
"github.com/docker/docker/pkg/stringid"
|
||||||
"gotest.tools/v3/assert"
|
"gotest.tools/v3/assert"
|
||||||
is "gotest.tools/v3/assert/cmp"
|
is "gotest.tools/v3/assert/cmp"
|
||||||
|
@ -25,47 +25,47 @@ func TestContainerPsContext(t *testing.T) {
|
||||||
|
|
||||||
var ctx ContainerContext
|
var ctx ContainerContext
|
||||||
cases := []struct {
|
cases := []struct {
|
||||||
container types.Container
|
container container.Summary
|
||||||
trunc bool
|
trunc bool
|
||||||
expValue string
|
expValue string
|
||||||
call func() string
|
call func() string
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
container: types.Container{ID: containerID},
|
container: container.Summary{ID: containerID},
|
||||||
trunc: true,
|
trunc: true,
|
||||||
expValue: stringid.TruncateID(containerID),
|
expValue: stringid.TruncateID(containerID),
|
||||||
call: ctx.ID,
|
call: ctx.ID,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
container: types.Container{ID: containerID},
|
container: container.Summary{ID: containerID},
|
||||||
expValue: containerID,
|
expValue: containerID,
|
||||||
call: ctx.ID,
|
call: ctx.ID,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
container: types.Container{Names: []string{"/foobar_baz"}},
|
container: container.Summary{Names: []string{"/foobar_baz"}},
|
||||||
trunc: true,
|
trunc: true,
|
||||||
expValue: "foobar_baz",
|
expValue: "foobar_baz",
|
||||||
call: ctx.Names,
|
call: ctx.Names,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
container: types.Container{Image: "ubuntu"},
|
container: container.Summary{Image: "ubuntu"},
|
||||||
trunc: true,
|
trunc: true,
|
||||||
expValue: "ubuntu",
|
expValue: "ubuntu",
|
||||||
call: ctx.Image,
|
call: ctx.Image,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
container: types.Container{Image: "verylongimagename"},
|
container: container.Summary{Image: "verylongimagename"},
|
||||||
trunc: true,
|
trunc: true,
|
||||||
expValue: "verylongimagename",
|
expValue: "verylongimagename",
|
||||||
call: ctx.Image,
|
call: ctx.Image,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
container: types.Container{Image: "verylongimagename"},
|
container: container.Summary{Image: "verylongimagename"},
|
||||||
expValue: "verylongimagename",
|
expValue: "verylongimagename",
|
||||||
call: ctx.Image,
|
call: ctx.Image,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
container: types.Container{
|
container: container.Summary{
|
||||||
Image: "a5a665ff33eced1e0803148700880edab4",
|
Image: "a5a665ff33eced1e0803148700880edab4",
|
||||||
ImageID: "a5a665ff33eced1e0803148700880edab4269067ed77e27737a708d0d293fbf5",
|
ImageID: "a5a665ff33eced1e0803148700880edab4269067ed77e27737a708d0d293fbf5",
|
||||||
},
|
},
|
||||||
|
@ -74,7 +74,7 @@ func TestContainerPsContext(t *testing.T) {
|
||||||
call: ctx.Image,
|
call: ctx.Image,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
container: types.Container{
|
container: container.Summary{
|
||||||
Image: "a5a665ff33eced1e0803148700880edab4",
|
Image: "a5a665ff33eced1e0803148700880edab4",
|
||||||
ImageID: "a5a665ff33eced1e0803148700880edab4269067ed77e27737a708d0d293fbf5",
|
ImageID: "a5a665ff33eced1e0803148700880edab4269067ed77e27737a708d0d293fbf5",
|
||||||
},
|
},
|
||||||
|
@ -82,67 +82,67 @@ func TestContainerPsContext(t *testing.T) {
|
||||||
call: ctx.Image,
|
call: ctx.Image,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
container: types.Container{Image: ""},
|
container: container.Summary{Image: ""},
|
||||||
trunc: true,
|
trunc: true,
|
||||||
expValue: "<no image>",
|
expValue: "<no image>",
|
||||||
call: ctx.Image,
|
call: ctx.Image,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
container: types.Container{Command: "sh -c 'ls -la'"},
|
container: container.Summary{Command: "sh -c 'ls -la'"},
|
||||||
trunc: true,
|
trunc: true,
|
||||||
expValue: `"sh -c 'ls -la'"`,
|
expValue: `"sh -c 'ls -la'"`,
|
||||||
call: ctx.Command,
|
call: ctx.Command,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
container: types.Container{Created: unix},
|
container: container.Summary{Created: unix},
|
||||||
trunc: true,
|
trunc: true,
|
||||||
expValue: time.Unix(unix, 0).String(),
|
expValue: time.Unix(unix, 0).String(),
|
||||||
call: ctx.CreatedAt,
|
call: ctx.CreatedAt,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
container: types.Container{Ports: []types.Port{{PrivatePort: 8080, PublicPort: 8080, Type: "tcp"}}},
|
container: container.Summary{Ports: []container.Port{{PrivatePort: 8080, PublicPort: 8080, Type: "tcp"}}},
|
||||||
trunc: true,
|
trunc: true,
|
||||||
expValue: "8080/tcp",
|
expValue: "8080/tcp",
|
||||||
call: ctx.Ports,
|
call: ctx.Ports,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
container: types.Container{Status: "RUNNING"},
|
container: container.Summary{Status: "RUNNING"},
|
||||||
trunc: true,
|
trunc: true,
|
||||||
expValue: "RUNNING",
|
expValue: "RUNNING",
|
||||||
call: ctx.Status,
|
call: ctx.Status,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
container: types.Container{SizeRw: 10},
|
container: container.Summary{SizeRw: 10},
|
||||||
trunc: true,
|
trunc: true,
|
||||||
expValue: "10B",
|
expValue: "10B",
|
||||||
call: ctx.Size,
|
call: ctx.Size,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
container: types.Container{SizeRw: 10, SizeRootFs: 20},
|
container: container.Summary{SizeRw: 10, SizeRootFs: 20},
|
||||||
trunc: true,
|
trunc: true,
|
||||||
expValue: "10B (virtual 20B)",
|
expValue: "10B (virtual 20B)",
|
||||||
call: ctx.Size,
|
call: ctx.Size,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
container: types.Container{},
|
container: container.Summary{},
|
||||||
trunc: true,
|
trunc: true,
|
||||||
call: ctx.Labels,
|
call: ctx.Labels,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
container: types.Container{Labels: map[string]string{"cpu": "6", "storage": "ssd"}},
|
container: container.Summary{Labels: map[string]string{"cpu": "6", "storage": "ssd"}},
|
||||||
trunc: true,
|
trunc: true,
|
||||||
expValue: "cpu=6,storage=ssd",
|
expValue: "cpu=6,storage=ssd",
|
||||||
call: ctx.Labels,
|
call: ctx.Labels,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
container: types.Container{Created: unix},
|
container: container.Summary{Created: unix},
|
||||||
trunc: true,
|
trunc: true,
|
||||||
expValue: "About a minute ago",
|
expValue: "About a minute ago",
|
||||||
call: ctx.RunningFor,
|
call: ctx.RunningFor,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
container: types.Container{
|
container: container.Summary{
|
||||||
Mounts: []types.MountPoint{
|
Mounts: []container.MountPoint{
|
||||||
{
|
{
|
||||||
Name: "this-is-a-long-volume-name-and-will-be-truncated-if-trunc-is-set",
|
Name: "this-is-a-long-volume-name-and-will-be-truncated-if-trunc-is-set",
|
||||||
Driver: "local",
|
Driver: "local",
|
||||||
|
@ -155,8 +155,8 @@ func TestContainerPsContext(t *testing.T) {
|
||||||
call: ctx.Mounts,
|
call: ctx.Mounts,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
container: types.Container{
|
container: container.Summary{
|
||||||
Mounts: []types.MountPoint{
|
Mounts: []container.MountPoint{
|
||||||
{
|
{
|
||||||
Driver: "local",
|
Driver: "local",
|
||||||
Source: "/a/path",
|
Source: "/a/path",
|
||||||
|
@ -167,8 +167,8 @@ func TestContainerPsContext(t *testing.T) {
|
||||||
call: ctx.Mounts,
|
call: ctx.Mounts,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
container: types.Container{
|
container: container.Summary{
|
||||||
Mounts: []types.MountPoint{
|
Mounts: []container.MountPoint{
|
||||||
{
|
{
|
||||||
Name: "733908409c91817de8e92b0096373245f329f19a88e2c849f02460e9b3d1c203",
|
Name: "733908409c91817de8e92b0096373245f329f19a88e2c849f02460e9b3d1c203",
|
||||||
Driver: "local",
|
Driver: "local",
|
||||||
|
@ -191,7 +191,7 @@ func TestContainerPsContext(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
c1 := types.Container{Labels: map[string]string{"com.docker.swarm.swarm-id": "33", "com.docker.swarm.node_name": "ubuntu"}}
|
c1 := container.Summary{Labels: map[string]string{"com.docker.swarm.swarm-id": "33", "com.docker.swarm.node_name": "ubuntu"}}
|
||||||
ctx = ContainerContext{c: c1, trunc: true}
|
ctx = ContainerContext{c: c1, trunc: true}
|
||||||
|
|
||||||
sid := ctx.Label("com.docker.swarm.swarm-id")
|
sid := ctx.Label("com.docker.swarm.swarm-id")
|
||||||
|
@ -204,7 +204,7 @@ func TestContainerPsContext(t *testing.T) {
|
||||||
t.Fatalf("Expected ubuntu, was %s\n", node)
|
t.Fatalf("Expected ubuntu, was %s\n", node)
|
||||||
}
|
}
|
||||||
|
|
||||||
c2 := types.Container{}
|
c2 := container.Summary{}
|
||||||
ctx = ContainerContext{c: c2, trunc: true}
|
ctx = ContainerContext{c: c2, trunc: true}
|
||||||
|
|
||||||
label := ctx.Label("anything.really")
|
label := ctx.Label("anything.really")
|
||||||
|
@ -340,7 +340,7 @@ size: 0B
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
containers := []types.Container{
|
containers := []container.Summary{
|
||||||
{ID: "containerID1", Names: []string{"/foobar_baz"}, Image: "ubuntu", Created: unixTime, State: "running"},
|
{ID: "containerID1", Names: []string{"/foobar_baz"}, Image: "ubuntu", Created: unixTime, State: "running"},
|
||||||
{ID: "containerID2", Names: []string{"/foobar_bar"}, Image: "ubuntu", Created: unixTime, State: "running"},
|
{ID: "containerID2", Names: []string{"/foobar_bar"}, Image: "ubuntu", Created: unixTime, State: "running"},
|
||||||
}
|
}
|
||||||
|
@ -362,7 +362,7 @@ size: 0B
|
||||||
|
|
||||||
func TestContainerContextWriteWithNoContainers(t *testing.T) {
|
func TestContainerContextWriteWithNoContainers(t *testing.T) {
|
||||||
out := bytes.NewBufferString("")
|
out := bytes.NewBufferString("")
|
||||||
containers := []types.Container{}
|
containers := []container.Summary{}
|
||||||
|
|
||||||
cases := []struct {
|
cases := []struct {
|
||||||
context Context
|
context Context
|
||||||
|
@ -424,7 +424,7 @@ func TestContainerContextWriteWithNoContainers(t *testing.T) {
|
||||||
|
|
||||||
func TestContainerContextWriteJSON(t *testing.T) {
|
func TestContainerContextWriteJSON(t *testing.T) {
|
||||||
unix := time.Now().Add(-65 * time.Second).Unix()
|
unix := time.Now().Add(-65 * time.Second).Unix()
|
||||||
containers := []types.Container{
|
containers := []container.Summary{
|
||||||
{ID: "containerID1", Names: []string{"/foobar_baz"}, Image: "ubuntu", Created: unix, State: "running"},
|
{ID: "containerID1", Names: []string{"/foobar_baz"}, Image: "ubuntu", Created: unix, State: "running"},
|
||||||
{ID: "containerID2", Names: []string{"/foobar_bar"}, Image: "ubuntu", Created: unix, State: "running"},
|
{ID: "containerID2", Names: []string{"/foobar_bar"}, Image: "ubuntu", Created: unix, State: "running"},
|
||||||
}
|
}
|
||||||
|
@ -478,7 +478,7 @@ func TestContainerContextWriteJSON(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestContainerContextWriteJSONField(t *testing.T) {
|
func TestContainerContextWriteJSONField(t *testing.T) {
|
||||||
containers := []types.Container{
|
containers := []container.Summary{
|
||||||
{ID: "containerID1", Names: []string{"/foobar_baz"}, Image: "ubuntu"},
|
{ID: "containerID1", Names: []string{"/foobar_baz"}, Image: "ubuntu"},
|
||||||
{ID: "containerID2", Names: []string{"/foobar_bar"}, Image: "ubuntu"},
|
{ID: "containerID2", Names: []string{"/foobar_bar"}, Image: "ubuntu"},
|
||||||
}
|
}
|
||||||
|
@ -497,7 +497,7 @@ func TestContainerContextWriteJSONField(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestContainerBackCompat(t *testing.T) {
|
func TestContainerBackCompat(t *testing.T) {
|
||||||
containers := []types.Container{{ID: "brewhaha"}}
|
containers := []container.Summary{{ID: "brewhaha"}}
|
||||||
cases := []string{
|
cases := []string{
|
||||||
"ID",
|
"ID",
|
||||||
"Names",
|
"Names",
|
||||||
|
@ -523,7 +523,7 @@ func TestContainerBackCompat(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
type ports struct {
|
type ports struct {
|
||||||
ports []types.Port
|
ports []container.Port
|
||||||
expected string
|
expected string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -531,7 +531,7 @@ type ports struct {
|
||||||
func TestDisplayablePorts(t *testing.T) {
|
func TestDisplayablePorts(t *testing.T) {
|
||||||
cases := []ports{
|
cases := []ports{
|
||||||
{
|
{
|
||||||
ports: []types.Port{
|
ports: []container.Port{
|
||||||
{
|
{
|
||||||
PrivatePort: 9988,
|
PrivatePort: 9988,
|
||||||
Type: "tcp",
|
Type: "tcp",
|
||||||
|
@ -540,7 +540,7 @@ func TestDisplayablePorts(t *testing.T) {
|
||||||
expected: "9988/tcp",
|
expected: "9988/tcp",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
ports: []types.Port{
|
ports: []container.Port{
|
||||||
{
|
{
|
||||||
PrivatePort: 9988,
|
PrivatePort: 9988,
|
||||||
Type: "udp",
|
Type: "udp",
|
||||||
|
@ -549,7 +549,7 @@ func TestDisplayablePorts(t *testing.T) {
|
||||||
expected: "9988/udp",
|
expected: "9988/udp",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
ports: []types.Port{
|
ports: []container.Port{
|
||||||
{
|
{
|
||||||
IP: "0.0.0.0",
|
IP: "0.0.0.0",
|
||||||
PrivatePort: 9988,
|
PrivatePort: 9988,
|
||||||
|
@ -559,7 +559,7 @@ func TestDisplayablePorts(t *testing.T) {
|
||||||
expected: "0.0.0.0:0->9988/tcp",
|
expected: "0.0.0.0:0->9988/tcp",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
ports: []types.Port{
|
ports: []container.Port{
|
||||||
{
|
{
|
||||||
PrivatePort: 9988,
|
PrivatePort: 9988,
|
||||||
PublicPort: 8899,
|
PublicPort: 8899,
|
||||||
|
@ -569,7 +569,7 @@ func TestDisplayablePorts(t *testing.T) {
|
||||||
expected: "9988/tcp",
|
expected: "9988/tcp",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
ports: []types.Port{
|
ports: []container.Port{
|
||||||
{
|
{
|
||||||
IP: "4.3.2.1",
|
IP: "4.3.2.1",
|
||||||
PrivatePort: 9988,
|
PrivatePort: 9988,
|
||||||
|
@ -580,7 +580,7 @@ func TestDisplayablePorts(t *testing.T) {
|
||||||
expected: "4.3.2.1:8899->9988/tcp",
|
expected: "4.3.2.1:8899->9988/tcp",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
ports: []types.Port{
|
ports: []container.Port{
|
||||||
{
|
{
|
||||||
IP: "4.3.2.1",
|
IP: "4.3.2.1",
|
||||||
PrivatePort: 9988,
|
PrivatePort: 9988,
|
||||||
|
@ -591,7 +591,7 @@ func TestDisplayablePorts(t *testing.T) {
|
||||||
expected: "4.3.2.1:9988->9988/tcp",
|
expected: "4.3.2.1:9988->9988/tcp",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
ports: []types.Port{
|
ports: []container.Port{
|
||||||
{
|
{
|
||||||
PrivatePort: 9988,
|
PrivatePort: 9988,
|
||||||
Type: "udp",
|
Type: "udp",
|
||||||
|
@ -603,7 +603,7 @@ func TestDisplayablePorts(t *testing.T) {
|
||||||
expected: "9988/udp, 9988/udp",
|
expected: "9988/udp, 9988/udp",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
ports: []types.Port{
|
ports: []container.Port{
|
||||||
{
|
{
|
||||||
IP: "1.2.3.4",
|
IP: "1.2.3.4",
|
||||||
PublicPort: 9998,
|
PublicPort: 9998,
|
||||||
|
@ -619,7 +619,7 @@ func TestDisplayablePorts(t *testing.T) {
|
||||||
expected: "1.2.3.4:9998-9999->9998-9999/udp",
|
expected: "1.2.3.4:9998-9999->9998-9999/udp",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
ports: []types.Port{
|
ports: []container.Port{
|
||||||
{
|
{
|
||||||
IP: "1.2.3.4",
|
IP: "1.2.3.4",
|
||||||
PublicPort: 8887,
|
PublicPort: 8887,
|
||||||
|
@ -635,7 +635,7 @@ func TestDisplayablePorts(t *testing.T) {
|
||||||
expected: "1.2.3.4:8887->9998/udp, 1.2.3.4:8888->9999/udp",
|
expected: "1.2.3.4:8887->9998/udp, 1.2.3.4:8888->9999/udp",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
ports: []types.Port{
|
ports: []container.Port{
|
||||||
{
|
{
|
||||||
PrivatePort: 9998,
|
PrivatePort: 9998,
|
||||||
Type: "udp",
|
Type: "udp",
|
||||||
|
@ -647,7 +647,7 @@ func TestDisplayablePorts(t *testing.T) {
|
||||||
expected: "9998-9999/udp",
|
expected: "9998-9999/udp",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
ports: []types.Port{
|
ports: []container.Port{
|
||||||
{
|
{
|
||||||
IP: "1.2.3.4",
|
IP: "1.2.3.4",
|
||||||
PrivatePort: 6677,
|
PrivatePort: 6677,
|
||||||
|
@ -662,7 +662,7 @@ func TestDisplayablePorts(t *testing.T) {
|
||||||
expected: "9988/udp, 1.2.3.4:7766->6677/tcp",
|
expected: "9988/udp, 1.2.3.4:7766->6677/tcp",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
ports: []types.Port{
|
ports: []container.Port{
|
||||||
{
|
{
|
||||||
IP: "1.2.3.4",
|
IP: "1.2.3.4",
|
||||||
PrivatePort: 9988,
|
PrivatePort: 9988,
|
||||||
|
@ -683,7 +683,7 @@ func TestDisplayablePorts(t *testing.T) {
|
||||||
expected: "4.3.2.1:3322->2233/tcp, 1.2.3.4:8899->9988/tcp, 1.2.3.4:8899->9988/udp",
|
expected: "4.3.2.1:3322->2233/tcp, 1.2.3.4:8899->9988/tcp, 1.2.3.4:8899->9988/udp",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
ports: []types.Port{
|
ports: []container.Port{
|
||||||
{
|
{
|
||||||
PrivatePort: 9988,
|
PrivatePort: 9988,
|
||||||
PublicPort: 8899,
|
PublicPort: 8899,
|
||||||
|
@ -703,7 +703,7 @@ func TestDisplayablePorts(t *testing.T) {
|
||||||
expected: "9988/udp, 4.3.2.1:3322->2233/tcp, 1.2.3.4:7766->6677/tcp",
|
expected: "9988/udp, 4.3.2.1:3322->2233/tcp, 1.2.3.4:7766->6677/tcp",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
ports: []types.Port{
|
ports: []container.Port{
|
||||||
{
|
{
|
||||||
PrivatePort: 80,
|
PrivatePort: 80,
|
||||||
Type: "tcp",
|
Type: "tcp",
|
||||||
|
|
|
@ -9,6 +9,7 @@ import (
|
||||||
|
|
||||||
"github.com/distribution/reference"
|
"github.com/distribution/reference"
|
||||||
"github.com/docker/docker/api/types"
|
"github.com/docker/docker/api/types"
|
||||||
|
"github.com/docker/docker/api/types/container"
|
||||||
"github.com/docker/docker/api/types/image"
|
"github.com/docker/docker/api/types/image"
|
||||||
"github.com/docker/docker/api/types/volume"
|
"github.com/docker/docker/api/types/volume"
|
||||||
units "github.com/docker/go-units"
|
units "github.com/docker/go-units"
|
||||||
|
@ -36,7 +37,7 @@ type DiskUsageContext struct {
|
||||||
Verbose bool
|
Verbose bool
|
||||||
LayersSize int64
|
LayersSize int64
|
||||||
Images []*image.Summary
|
Images []*image.Summary
|
||||||
Containers []*types.Container
|
Containers []*container.Summary
|
||||||
Volumes []*volume.Volume
|
Volumes []*volume.Volume
|
||||||
BuildCache []*types.BuildCache
|
BuildCache []*types.BuildCache
|
||||||
BuilderSize int64
|
BuilderSize int64
|
||||||
|
@ -124,7 +125,7 @@ func (ctx *DiskUsageContext) Write() (err error) {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
diskUsageContainersCtx := diskUsageContainersContext{containers: []*types.Container{}}
|
diskUsageContainersCtx := diskUsageContainersContext{containers: []*container.Summary{}}
|
||||||
diskUsageContainersCtx.Header = SubHeaderContext{
|
diskUsageContainersCtx.Header = SubHeaderContext{
|
||||||
"Type": typeHeader,
|
"Type": typeHeader,
|
||||||
"TotalCount": totalHeader,
|
"TotalCount": totalHeader,
|
||||||
|
@ -313,7 +314,7 @@ func (c *diskUsageImagesContext) Reclaimable() string {
|
||||||
|
|
||||||
type diskUsageContainersContext struct {
|
type diskUsageContainersContext struct {
|
||||||
HeaderContext
|
HeaderContext
|
||||||
containers []*types.Container
|
containers []*container.Summary
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *diskUsageContainersContext) MarshalJSON() ([]byte, error) {
|
func (c *diskUsageContainersContext) MarshalJSON() ([]byte, error) {
|
||||||
|
@ -328,10 +329,10 @@ func (c *diskUsageContainersContext) TotalCount() string {
|
||||||
return strconv.Itoa(len(c.containers))
|
return strconv.Itoa(len(c.containers))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *diskUsageContainersContext) isActive(container types.Container) bool {
|
func (c *diskUsageContainersContext) isActive(ctr container.Summary) bool {
|
||||||
return strings.Contains(container.State, "running") ||
|
return strings.Contains(ctr.State, "running") ||
|
||||||
strings.Contains(container.State, "paused") ||
|
strings.Contains(ctr.State, "paused") ||
|
||||||
strings.Contains(container.State, "restarting")
|
strings.Contains(ctr.State, "restarting")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *diskUsageContainersContext) Active() string {
|
func (c *diskUsageContainersContext) Active() string {
|
||||||
|
|
|
@ -24,7 +24,7 @@ type fakeClient struct {
|
||||||
imagesPruneFunc func(pruneFilter filters.Args) (image.PruneReport, error)
|
imagesPruneFunc func(pruneFilter filters.Args) (image.PruneReport, error)
|
||||||
imageLoadFunc func(input io.Reader, quiet bool) (image.LoadResponse, error)
|
imageLoadFunc func(input io.Reader, quiet bool) (image.LoadResponse, error)
|
||||||
imageListFunc func(options image.ListOptions) ([]image.Summary, error)
|
imageListFunc func(options image.ListOptions) ([]image.Summary, error)
|
||||||
imageInspectFunc func(img string) (types.ImageInspect, []byte, error)
|
imageInspectFunc func(img string) (image.InspectResponse, []byte, error)
|
||||||
imageImportFunc func(source image.ImportSource, ref string, options image.ImportOptions) (io.ReadCloser, error)
|
imageImportFunc func(source image.ImportSource, ref string, options image.ImportOptions) (io.ReadCloser, error)
|
||||||
imageHistoryFunc func(img string) ([]image.HistoryResponseItem, error)
|
imageHistoryFunc func(img string) ([]image.HistoryResponseItem, error)
|
||||||
imageBuildFunc func(context.Context, io.Reader, types.ImageBuildOptions) (types.ImageBuildResponse, error)
|
imageBuildFunc func(context.Context, io.Reader, types.ImageBuildOptions) (types.ImageBuildResponse, error)
|
||||||
|
@ -95,11 +95,11 @@ func (cli *fakeClient) ImageList(_ context.Context, options image.ListOptions) (
|
||||||
return []image.Summary{}, nil
|
return []image.Summary{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cli *fakeClient) ImageInspectWithRaw(_ context.Context, img string) (types.ImageInspect, []byte, error) {
|
func (cli *fakeClient) ImageInspectWithRaw(_ context.Context, img string) (image.InspectResponse, []byte, error) {
|
||||||
if cli.imageInspectFunc != nil {
|
if cli.imageInspectFunc != nil {
|
||||||
return cli.imageInspectFunc(img)
|
return cli.imageInspectFunc(img)
|
||||||
}
|
}
|
||||||
return types.ImageInspect{}, nil, nil
|
return image.InspectResponse{}, nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cli *fakeClient) ImageImport(_ context.Context, source image.ImportSource, ref string,
|
func (cli *fakeClient) ImageImport(_ context.Context, source image.ImportSource, ref string,
|
||||||
|
|
|
@ -6,7 +6,7 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/docker/cli/internal/test"
|
"github.com/docker/cli/internal/test"
|
||||||
"github.com/docker/docker/api/types"
|
"github.com/docker/docker/api/types/image"
|
||||||
"gotest.tools/v3/assert"
|
"gotest.tools/v3/assert"
|
||||||
is "gotest.tools/v3/assert/cmp"
|
is "gotest.tools/v3/assert/cmp"
|
||||||
"gotest.tools/v3/golden"
|
"gotest.tools/v3/golden"
|
||||||
|
@ -42,39 +42,39 @@ func TestNewInspectCommandSuccess(t *testing.T) {
|
||||||
name string
|
name string
|
||||||
args []string
|
args []string
|
||||||
imageCount int
|
imageCount int
|
||||||
imageInspectFunc func(img string) (types.ImageInspect, []byte, error)
|
imageInspectFunc func(img string) (image.InspectResponse, []byte, error)
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "simple",
|
name: "simple",
|
||||||
args: []string{"image"},
|
args: []string{"image"},
|
||||||
imageCount: 1,
|
imageCount: 1,
|
||||||
imageInspectFunc: func(img string) (types.ImageInspect, []byte, error) {
|
imageInspectFunc: func(img string) (image.InspectResponse, []byte, error) {
|
||||||
imageInspectInvocationCount++
|
imageInspectInvocationCount++
|
||||||
assert.Check(t, is.Equal("image", img))
|
assert.Check(t, is.Equal("image", img))
|
||||||
return types.ImageInspect{}, nil, nil
|
return image.InspectResponse{}, nil, nil
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "format",
|
name: "format",
|
||||||
imageCount: 1,
|
imageCount: 1,
|
||||||
args: []string{"--format='{{.ID}}'", "image"},
|
args: []string{"--format='{{.ID}}'", "image"},
|
||||||
imageInspectFunc: func(img string) (types.ImageInspect, []byte, error) {
|
imageInspectFunc: func(img string) (image.InspectResponse, []byte, error) {
|
||||||
imageInspectInvocationCount++
|
imageInspectInvocationCount++
|
||||||
return types.ImageInspect{ID: img}, nil, nil
|
return image.InspectResponse{ID: img}, nil, nil
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "simple-many",
|
name: "simple-many",
|
||||||
args: []string{"image1", "image2"},
|
args: []string{"image1", "image2"},
|
||||||
imageCount: 2,
|
imageCount: 2,
|
||||||
imageInspectFunc: func(img string) (types.ImageInspect, []byte, error) {
|
imageInspectFunc: func(img string) (image.InspectResponse, []byte, error) {
|
||||||
imageInspectInvocationCount++
|
imageInspectInvocationCount++
|
||||||
if imageInspectInvocationCount == 1 {
|
if imageInspectInvocationCount == 1 {
|
||||||
assert.Check(t, is.Equal("image1", img))
|
assert.Check(t, is.Equal("image1", img))
|
||||||
} else {
|
} else {
|
||||||
assert.Check(t, is.Equal("image2", img))
|
assert.Check(t, is.Equal("image2", img))
|
||||||
}
|
}
|
||||||
return types.ImageInspect{}, nil, nil
|
return image.InspectResponse{}, nil, nil
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,7 +6,7 @@ import (
|
||||||
"github.com/docker/cli/cli"
|
"github.com/docker/cli/cli"
|
||||||
"github.com/docker/cli/cli/command"
|
"github.com/docker/cli/cli/command"
|
||||||
"github.com/docker/cli/cli/command/completion"
|
"github.com/docker/cli/cli/command/completion"
|
||||||
"github.com/docker/docker/api/types"
|
"github.com/docker/docker/api/types/container"
|
||||||
"github.com/docker/docker/client"
|
"github.com/docker/docker/client"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
)
|
)
|
||||||
|
@ -48,8 +48,8 @@ func runDisconnect(ctx context.Context, apiClient client.NetworkAPIClient, opts
|
||||||
return apiClient.NetworkDisconnect(ctx, opts.network, opts.container, opts.force)
|
return apiClient.NetworkDisconnect(ctx, opts.network, opts.container, opts.force)
|
||||||
}
|
}
|
||||||
|
|
||||||
func isConnected(network string) func(types.Container) bool {
|
func isConnected(network string) func(container.Summary) bool {
|
||||||
return func(ctr types.Container) bool {
|
return func(ctr container.Summary) bool {
|
||||||
if ctr.NetworkSettings == nil {
|
if ctr.NetworkSettings == nil {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
@ -58,8 +58,8 @@ func isConnected(network string) func(types.Container) bool {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func not(fn func(types.Container) bool) func(types.Container) bool {
|
func not(fn func(container.Summary) bool) func(container.Summary) bool {
|
||||||
return func(ctr types.Container) bool {
|
return func(ctr container.Summary) bool {
|
||||||
ok := fn(ctr)
|
ok := fn(ctr)
|
||||||
return !ok
|
return !ok
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,7 +10,6 @@ import (
|
||||||
"github.com/docker/cli/cli/trust"
|
"github.com/docker/cli/cli/trust"
|
||||||
"github.com/docker/cli/internal/test"
|
"github.com/docker/cli/internal/test"
|
||||||
notaryfake "github.com/docker/cli/internal/test/notary"
|
notaryfake "github.com/docker/cli/internal/test/notary"
|
||||||
"github.com/docker/docker/api/types"
|
|
||||||
"github.com/docker/docker/api/types/image"
|
"github.com/docker/docker/api/types/image"
|
||||||
"github.com/docker/docker/api/types/system"
|
"github.com/docker/docker/api/types/system"
|
||||||
"github.com/docker/docker/client"
|
"github.com/docker/docker/client"
|
||||||
|
@ -33,8 +32,8 @@ func (c *fakeClient) Info(context.Context) (system.Info, error) {
|
||||||
return system.Info{}, nil
|
return system.Info{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *fakeClient) ImageInspectWithRaw(context.Context, string) (types.ImageInspect, []byte, error) {
|
func (c *fakeClient) ImageInspectWithRaw(context.Context, string) (image.InspectResponse, []byte, error) {
|
||||||
return types.ImageInspect{}, []byte{}, nil
|
return image.InspectResponse{}, []byte{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *fakeClient) ImagePush(context.Context, string, image.PushOptions) (io.ReadCloser, error) {
|
func (c *fakeClient) ImagePush(context.Context, string, image.PushOptions) (io.ReadCloser, error) {
|
||||||
|
|
|
@ -3,15 +3,15 @@ package builders
|
||||||
import (
|
import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/docker/docker/api/types"
|
"github.com/docker/docker/api/types/container"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Container creates a container with default values.
|
// Container creates a container with default values.
|
||||||
// Any number of container function builder can be passed to augment it.
|
// Any number of container function builder can be passed to augment it.
|
||||||
func Container(name string, builders ...func(c *types.Container)) *types.Container {
|
func Container(name string, builders ...func(c *container.Summary)) *container.Summary {
|
||||||
// now := time.Now()
|
// now := time.Now()
|
||||||
// onehourago := now.Add(-120 * time.Minute)
|
// onehourago := now.Add(-120 * time.Minute)
|
||||||
ctr := &types.Container{
|
ctr := &container.Summary{
|
||||||
ID: "container_id",
|
ID: "container_id",
|
||||||
Names: []string{"/" + name},
|
Names: []string{"/" + name},
|
||||||
Command: "top",
|
Command: "top",
|
||||||
|
@ -28,8 +28,8 @@ func Container(name string, builders ...func(c *types.Container)) *types.Contain
|
||||||
}
|
}
|
||||||
|
|
||||||
// WithLabel adds a label to the container
|
// WithLabel adds a label to the container
|
||||||
func WithLabel(key, value string) func(*types.Container) {
|
func WithLabel(key, value string) func(*container.Summary) {
|
||||||
return func(c *types.Container) {
|
return func(c *container.Summary) {
|
||||||
if c.Labels == nil {
|
if c.Labels == nil {
|
||||||
c.Labels = map[string]string{}
|
c.Labels = map[string]string{}
|
||||||
}
|
}
|
||||||
|
@ -38,19 +38,19 @@ func WithLabel(key, value string) func(*types.Container) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// WithName adds a name to the container
|
// WithName adds a name to the container
|
||||||
func WithName(name string) func(*types.Container) {
|
func WithName(name string) func(*container.Summary) {
|
||||||
return func(c *types.Container) {
|
return func(c *container.Summary) {
|
||||||
c.Names = append(c.Names, "/"+name)
|
c.Names = append(c.Names, "/"+name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// WithPort adds a port mapping to the container
|
// WithPort adds a port mapping to the container
|
||||||
func WithPort(privatePort, publicPort uint16, builders ...func(*types.Port)) func(*types.Container) {
|
func WithPort(privatePort, publicPort uint16, builders ...func(*container.Port)) func(*container.Summary) {
|
||||||
return func(c *types.Container) {
|
return func(c *container.Summary) {
|
||||||
if c.Ports == nil {
|
if c.Ports == nil {
|
||||||
c.Ports = []types.Port{}
|
c.Ports = []container.Port{}
|
||||||
}
|
}
|
||||||
port := &types.Port{
|
port := &container.Port{
|
||||||
PrivatePort: privatePort,
|
PrivatePort: privatePort,
|
||||||
PublicPort: publicPort,
|
PublicPort: publicPort,
|
||||||
}
|
}
|
||||||
|
@ -62,8 +62,8 @@ func WithPort(privatePort, publicPort uint16, builders ...func(*types.Port)) fun
|
||||||
}
|
}
|
||||||
|
|
||||||
// WithSize adds size in bytes to the container
|
// WithSize adds size in bytes to the container
|
||||||
func WithSize(size int64) func(*types.Container) {
|
func WithSize(size int64) func(*container.Summary) {
|
||||||
return func(c *types.Container) {
|
return func(c *container.Summary) {
|
||||||
if size >= 0 {
|
if size >= 0 {
|
||||||
c.SizeRw = size
|
c.SizeRw = size
|
||||||
}
|
}
|
||||||
|
@ -71,18 +71,18 @@ func WithSize(size int64) func(*types.Container) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// IP sets the ip of the port
|
// IP sets the ip of the port
|
||||||
func IP(ip string) func(*types.Port) {
|
func IP(ip string) func(*container.Port) {
|
||||||
return func(p *types.Port) {
|
return func(p *container.Port) {
|
||||||
p.IP = ip
|
p.IP = ip
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TCP sets the port to tcp
|
// TCP sets the port to tcp
|
||||||
func TCP(p *types.Port) {
|
func TCP(p *container.Port) {
|
||||||
p.Type = "tcp"
|
p.Type = "tcp"
|
||||||
}
|
}
|
||||||
|
|
||||||
// UDP sets the port to udp
|
// UDP sets the port to udp
|
||||||
func UDP(p *types.Port) {
|
func UDP(p *container.Port) {
|
||||||
p.Type = "udp"
|
p.Type = "udp"
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,7 +13,7 @@ require (
|
||||||
github.com/distribution/reference v0.6.0
|
github.com/distribution/reference v0.6.0
|
||||||
github.com/docker/cli-docs-tool v0.7.0
|
github.com/docker/cli-docs-tool v0.7.0
|
||||||
github.com/docker/distribution v2.8.3+incompatible
|
github.com/docker/distribution v2.8.3+incompatible
|
||||||
github.com/docker/docker v27.0.3+incompatible
|
github.com/docker/docker v27.0.2-0.20240703234935-508cc7c61226+incompatible // master (v-next)
|
||||||
github.com/docker/docker-credential-helpers v0.8.2
|
github.com/docker/docker-credential-helpers v0.8.2
|
||||||
github.com/docker/go-connections v0.5.0
|
github.com/docker/go-connections v0.5.0
|
||||||
github.com/docker/go-units v0.5.0
|
github.com/docker/go-units v0.5.0
|
||||||
|
|
|
@ -59,8 +59,8 @@ github.com/docker/cli-docs-tool v0.7.0/go.mod h1:zMjqTFCU361PRh8apiXzeAZ1Q/xupbI
|
||||||
github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
|
github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
|
||||||
github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk=
|
github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk=
|
||||||
github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
|
github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
|
||||||
github.com/docker/docker v27.0.3+incompatible h1:aBGI9TeQ4MPlhquTQKq9XbK79rKFVwXNUAYz9aXyEBE=
|
github.com/docker/docker v27.0.2-0.20240703234935-508cc7c61226+incompatible h1:Fx3TVBPjkrFXwUwklYcmm91iIP2SKYpOJ12UpzXAddo=
|
||||||
github.com/docker/docker v27.0.3+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
github.com/docker/docker v27.0.2-0.20240703234935-508cc7c61226+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
||||||
github.com/docker/docker-credential-helpers v0.8.2 h1:bX3YxiGzFP5sOXWc3bTPEXdEaZSeVMrFgOr3T+zrFAo=
|
github.com/docker/docker-credential-helpers v0.8.2 h1:bX3YxiGzFP5sOXWc3bTPEXdEaZSeVMrFgOr3T+zrFAo=
|
||||||
github.com/docker/docker-credential-helpers v0.8.2/go.mod h1:P3ci7E3lwkZg6XiHdRKft1KckHiO9a2rNtyFbZ/ry9M=
|
github.com/docker/docker-credential-helpers v0.8.2/go.mod h1:P3ci7E3lwkZg6XiHdRKft1KckHiO9a2rNtyFbZ/ry9M=
|
||||||
github.com/docker/go v1.5.1-1.0.20160303222718-d30aec9fd63c h1:lzqkGL9b3znc+ZUgi7FlLnqjQhcXxkNM/quxIjBVMD0=
|
github.com/docker/go v1.5.1-1.0.20160303222718-d30aec9fd63c h1:lzqkGL9b3znc+ZUgi7FlLnqjQhcXxkNM/quxIjBVMD0=
|
||||||
|
|
|
@ -1917,7 +1917,7 @@ definitions:
|
||||||
type: "string"
|
type: "string"
|
||||||
example: "4443"
|
example: "4443"
|
||||||
|
|
||||||
GraphDriverData:
|
DriverData:
|
||||||
description: |
|
description: |
|
||||||
Information about the storage driver used to store the container's and
|
Information about the storage driver used to store the container's and
|
||||||
image's filesystem.
|
image's filesystem.
|
||||||
|
@ -2107,7 +2107,7 @@ definitions:
|
||||||
format: "int64"
|
format: "int64"
|
||||||
example: 1239828
|
example: 1239828
|
||||||
GraphDriver:
|
GraphDriver:
|
||||||
$ref: "#/definitions/GraphDriverData"
|
$ref: "#/definitions/DriverData"
|
||||||
RootFS:
|
RootFS:
|
||||||
description: |
|
description: |
|
||||||
Information about the image's RootFS, including the layer IDs.
|
Information about the image's RootFS, including the layer IDs.
|
||||||
|
@ -5334,7 +5334,7 @@ definitions:
|
||||||
The version Go used to compile the daemon, and the version of the Go
|
The version Go used to compile the daemon, and the version of the Go
|
||||||
runtime in use.
|
runtime in use.
|
||||||
type: "string"
|
type: "string"
|
||||||
example: "go1.21.11"
|
example: "go1.21.12"
|
||||||
Os:
|
Os:
|
||||||
description: |
|
description: |
|
||||||
The operating system that the daemon is running on ("linux" or "windows")
|
The operating system that the daemon is running on ("linux" or "windows")
|
||||||
|
@ -7123,7 +7123,7 @@ paths:
|
||||||
HostConfig:
|
HostConfig:
|
||||||
$ref: "#/definitions/HostConfig"
|
$ref: "#/definitions/HostConfig"
|
||||||
GraphDriver:
|
GraphDriver:
|
||||||
$ref: "#/definitions/GraphDriverData"
|
$ref: "#/definitions/DriverData"
|
||||||
SizeRw:
|
SizeRw:
|
||||||
description: |
|
description: |
|
||||||
The size of files that have been created or changed by this
|
The size of files that have been created or changed by this
|
||||||
|
|
|
@ -4,6 +4,9 @@ import (
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/docker/docker/api/types/mount"
|
||||||
|
"github.com/docker/docker/api/types/storage"
|
||||||
)
|
)
|
||||||
|
|
||||||
// PruneReport contains the response for Engine API:
|
// PruneReport contains the response for Engine API:
|
||||||
|
@ -42,3 +45,130 @@ type StatsResponseReader struct {
|
||||||
Body io.ReadCloser `json:"body"`
|
Body io.ReadCloser `json:"body"`
|
||||||
OSType string `json:"ostype"`
|
OSType string `json:"ostype"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MountPoint represents a mount point configuration inside the container.
|
||||||
|
// This is used for reporting the mountpoints in use by a container.
|
||||||
|
type MountPoint struct {
|
||||||
|
// Type is the type of mount, see `Type<foo>` definitions in
|
||||||
|
// github.com/docker/docker/api/types/mount.Type
|
||||||
|
Type mount.Type `json:",omitempty"`
|
||||||
|
|
||||||
|
// Name is the name reference to the underlying data defined by `Source`
|
||||||
|
// e.g., the volume name.
|
||||||
|
Name string `json:",omitempty"`
|
||||||
|
|
||||||
|
// Source is the source location of the mount.
|
||||||
|
//
|
||||||
|
// For volumes, this contains the storage location of the volume (within
|
||||||
|
// `/var/lib/docker/volumes/`). For bind-mounts, and `npipe`, this contains
|
||||||
|
// the source (host) part of the bind-mount. For `tmpfs` mount points, this
|
||||||
|
// field is empty.
|
||||||
|
Source string
|
||||||
|
|
||||||
|
// Destination is the path relative to the container root (`/`) where the
|
||||||
|
// Source is mounted inside the container.
|
||||||
|
Destination string
|
||||||
|
|
||||||
|
// Driver is the volume driver used to create the volume (if it is a volume).
|
||||||
|
Driver string `json:",omitempty"`
|
||||||
|
|
||||||
|
// Mode is a comma separated list of options supplied by the user when
|
||||||
|
// creating the bind/volume mount.
|
||||||
|
//
|
||||||
|
// The default is platform-specific (`"z"` on Linux, empty on Windows).
|
||||||
|
Mode string
|
||||||
|
|
||||||
|
// RW indicates whether the mount is mounted writable (read-write).
|
||||||
|
RW bool
|
||||||
|
|
||||||
|
// Propagation describes how mounts are propagated from the host into the
|
||||||
|
// mount point, and vice-versa. Refer to the Linux kernel documentation
|
||||||
|
// for details:
|
||||||
|
// https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt
|
||||||
|
//
|
||||||
|
// This field is not used on Windows.
|
||||||
|
Propagation mount.Propagation
|
||||||
|
}
|
||||||
|
|
||||||
|
// State stores container's running state
|
||||||
|
// it's part of ContainerJSONBase and returned by "inspect" command
|
||||||
|
type State struct {
|
||||||
|
Status string // String representation of the container state. Can be one of "created", "running", "paused", "restarting", "removing", "exited", or "dead"
|
||||||
|
Running bool
|
||||||
|
Paused bool
|
||||||
|
Restarting bool
|
||||||
|
OOMKilled bool
|
||||||
|
Dead bool
|
||||||
|
Pid int
|
||||||
|
ExitCode int
|
||||||
|
Error string
|
||||||
|
StartedAt string
|
||||||
|
FinishedAt string
|
||||||
|
Health *Health `json:",omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Summary contains response of Engine API:
|
||||||
|
// GET "/containers/json"
|
||||||
|
type Summary struct {
|
||||||
|
ID string `json:"Id"`
|
||||||
|
Names []string
|
||||||
|
Image string
|
||||||
|
ImageID string
|
||||||
|
Command string
|
||||||
|
Created int64
|
||||||
|
Ports []Port
|
||||||
|
SizeRw int64 `json:",omitempty"`
|
||||||
|
SizeRootFs int64 `json:",omitempty"`
|
||||||
|
Labels map[string]string
|
||||||
|
State string
|
||||||
|
Status string
|
||||||
|
HostConfig struct {
|
||||||
|
NetworkMode string `json:",omitempty"`
|
||||||
|
Annotations map[string]string `json:",omitempty"`
|
||||||
|
}
|
||||||
|
NetworkSettings *NetworkSettingsSummary
|
||||||
|
Mounts []MountPoint
|
||||||
|
}
|
||||||
|
|
||||||
|
// ContainerJSONBase contains response of Engine API GET "/containers/{name:.*}/json"
|
||||||
|
// for API version 1.18 and older.
|
||||||
|
//
|
||||||
|
// TODO(thaJeztah): combine ContainerJSONBase and InspectResponse into a single struct.
|
||||||
|
// The split between ContainerJSONBase (ContainerJSONBase) and InspectResponse (InspectResponse)
|
||||||
|
// was done in commit 6deaa58ba5f051039643cedceee97c8695e2af74 (https://github.com/moby/moby/pull/13675).
|
||||||
|
// ContainerJSONBase contained all fields for API < 1.19, and InspectResponse
|
||||||
|
// held fields that were added in API 1.19 and up. Given that the minimum
|
||||||
|
// supported API version is now 1.24, we no longer use the separate type.
|
||||||
|
type ContainerJSONBase struct {
|
||||||
|
ID string `json:"Id"`
|
||||||
|
Created string
|
||||||
|
Path string
|
||||||
|
Args []string
|
||||||
|
State *State
|
||||||
|
Image string
|
||||||
|
ResolvConfPath string
|
||||||
|
HostnamePath string
|
||||||
|
HostsPath string
|
||||||
|
LogPath string
|
||||||
|
Name string
|
||||||
|
RestartCount int
|
||||||
|
Driver string
|
||||||
|
Platform string
|
||||||
|
MountLabel string
|
||||||
|
ProcessLabel string
|
||||||
|
AppArmorProfile string
|
||||||
|
ExecIDs []string
|
||||||
|
HostConfig *HostConfig
|
||||||
|
GraphDriver storage.DriverData
|
||||||
|
SizeRw *int64 `json:",omitempty"`
|
||||||
|
SizeRootFs *int64 `json:",omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// InspectResponse is the response for the GET "/containers/{name:.*}/json"
|
||||||
|
// endpoint.
|
||||||
|
type InspectResponse struct {
|
||||||
|
*ContainerJSONBase
|
||||||
|
Mounts []MountPoint
|
||||||
|
Config *Config
|
||||||
|
NetworkSettings *NetworkSettings
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
package container
|
||||||
|
|
||||||
|
import "time"
|
||||||
|
|
||||||
|
// Health states
|
||||||
|
const (
|
||||||
|
NoHealthcheck = "none" // Indicates there is no healthcheck
|
||||||
|
Starting = "starting" // Starting indicates that the container is not yet ready
|
||||||
|
Healthy = "healthy" // Healthy indicates that the container is running correctly
|
||||||
|
Unhealthy = "unhealthy" // Unhealthy indicates that the container has a problem
|
||||||
|
)
|
||||||
|
|
||||||
|
// Health stores information about the container's healthcheck results
|
||||||
|
type Health struct {
|
||||||
|
Status string // Status is one of [Starting], [Healthy] or [Unhealthy].
|
||||||
|
FailingStreak int // FailingStreak is the number of consecutive failures
|
||||||
|
Log []*HealthcheckResult // Log contains the last few results (oldest first)
|
||||||
|
}
|
||||||
|
|
||||||
|
// HealthcheckResult stores information about a single run of a healthcheck probe
|
||||||
|
type HealthcheckResult struct {
|
||||||
|
Start time.Time // Start is the time this check started
|
||||||
|
End time.Time // End is the time this check ended
|
||||||
|
ExitCode int // ExitCode meanings: 0=healthy, 1=unhealthy, 2=reserved (considered unhealthy), else=error running probe
|
||||||
|
Output string // Output from last check
|
||||||
|
}
|
56
vendor/github.com/docker/docker/api/types/container/network_settings.go
generated
vendored
Normal file
56
vendor/github.com/docker/docker/api/types/container/network_settings.go
generated
vendored
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
package container
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/docker/docker/api/types/network"
|
||||||
|
"github.com/docker/go-connections/nat"
|
||||||
|
)
|
||||||
|
|
||||||
|
// NetworkSettings exposes the network settings in the api
|
||||||
|
type NetworkSettings struct {
|
||||||
|
NetworkSettingsBase
|
||||||
|
DefaultNetworkSettings
|
||||||
|
Networks map[string]*network.EndpointSettings
|
||||||
|
}
|
||||||
|
|
||||||
|
// NetworkSettingsBase holds networking state for a container when inspecting it.
|
||||||
|
type NetworkSettingsBase struct {
|
||||||
|
Bridge string // Bridge contains the name of the default bridge interface iff it was set through the daemon --bridge flag.
|
||||||
|
SandboxID string // SandboxID uniquely represents a container's network stack
|
||||||
|
SandboxKey string // SandboxKey identifies the sandbox
|
||||||
|
Ports nat.PortMap // Ports is a collection of PortBinding indexed by Port
|
||||||
|
|
||||||
|
// HairpinMode specifies if hairpin NAT should be enabled on the virtual interface
|
||||||
|
//
|
||||||
|
// Deprecated: This field is never set and will be removed in a future release.
|
||||||
|
HairpinMode bool
|
||||||
|
// LinkLocalIPv6Address is an IPv6 unicast address using the link-local prefix
|
||||||
|
//
|
||||||
|
// Deprecated: This field is never set and will be removed in a future release.
|
||||||
|
LinkLocalIPv6Address string
|
||||||
|
// LinkLocalIPv6PrefixLen is the prefix length of an IPv6 unicast address
|
||||||
|
//
|
||||||
|
// Deprecated: This field is never set and will be removed in a future release.
|
||||||
|
LinkLocalIPv6PrefixLen int
|
||||||
|
SecondaryIPAddresses []network.Address // Deprecated: This field is never set and will be removed in a future release.
|
||||||
|
SecondaryIPv6Addresses []network.Address // Deprecated: This field is never set and will be removed in a future release.
|
||||||
|
}
|
||||||
|
|
||||||
|
// DefaultNetworkSettings holds network information
|
||||||
|
// during the 2 release deprecation period.
|
||||||
|
// It will be removed in Docker 1.11.
|
||||||
|
type DefaultNetworkSettings struct {
|
||||||
|
EndpointID string // EndpointID uniquely represents a service endpoint in a Sandbox
|
||||||
|
Gateway string // Gateway holds the gateway address for the network
|
||||||
|
GlobalIPv6Address string // GlobalIPv6Address holds network's global IPv6 address
|
||||||
|
GlobalIPv6PrefixLen int // GlobalIPv6PrefixLen represents mask length of network's global IPv6 address
|
||||||
|
IPAddress string // IPAddress holds the IPv4 address for the network
|
||||||
|
IPPrefixLen int // IPPrefixLen represents mask length of network's IPv4 address
|
||||||
|
IPv6Gateway string // IPv6Gateway holds gateway address specific for IPv6
|
||||||
|
MacAddress string // MacAddress holds the MAC address for the network
|
||||||
|
}
|
||||||
|
|
||||||
|
// NetworkSettingsSummary provides a summary of container's networks
|
||||||
|
// in /containers/json
|
||||||
|
type NetworkSettingsSummary struct {
|
||||||
|
Networks map[string]*network.EndpointSettings
|
||||||
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
package types
|
package container
|
||||||
|
|
||||||
// This file was generated by the swagger tool.
|
// This file was generated by the swagger tool.
|
||||||
// Editing this file might prove futile when you re-run the swagger generate command
|
// Editing this file might prove futile when you re-run the swagger generate command
|
|
@ -0,0 +1,122 @@
|
||||||
|
package image
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/docker/docker/api/types/container"
|
||||||
|
"github.com/docker/docker/api/types/storage"
|
||||||
|
)
|
||||||
|
|
||||||
|
// RootFS returns Image's RootFS description including the layer IDs.
|
||||||
|
type RootFS struct {
|
||||||
|
Type string `json:",omitempty"`
|
||||||
|
Layers []string `json:",omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// InspectResponse contains response of Engine API:
|
||||||
|
// GET "/images/{name:.*}/json"
|
||||||
|
type InspectResponse struct {
|
||||||
|
// ID is the content-addressable ID of an image.
|
||||||
|
//
|
||||||
|
// This identifier is a content-addressable digest calculated from the
|
||||||
|
// image's configuration (which includes the digests of layers used by
|
||||||
|
// the image).
|
||||||
|
//
|
||||||
|
// Note that this digest differs from the `RepoDigests` below, which
|
||||||
|
// holds digests of image manifests that reference the image.
|
||||||
|
ID string `json:"Id"`
|
||||||
|
|
||||||
|
// RepoTags is a list of image names/tags in the local image cache that
|
||||||
|
// reference this image.
|
||||||
|
//
|
||||||
|
// Multiple image tags can refer to the same image, and this list may be
|
||||||
|
// empty if no tags reference the image, in which case the image is
|
||||||
|
// "untagged", in which case it can still be referenced by its ID.
|
||||||
|
RepoTags []string
|
||||||
|
|
||||||
|
// RepoDigests is a list of content-addressable digests of locally available
|
||||||
|
// image manifests that the image is referenced from. Multiple manifests can
|
||||||
|
// refer to the same image.
|
||||||
|
//
|
||||||
|
// These digests are usually only available if the image was either pulled
|
||||||
|
// from a registry, or if the image was pushed to a registry, which is when
|
||||||
|
// the manifest is generated and its digest calculated.
|
||||||
|
RepoDigests []string
|
||||||
|
|
||||||
|
// Parent is the ID of the parent image.
|
||||||
|
//
|
||||||
|
// Depending on how the image was created, this field may be empty and
|
||||||
|
// is only set for images that were built/created locally. This field
|
||||||
|
// is empty if the image was pulled from an image registry.
|
||||||
|
Parent string
|
||||||
|
|
||||||
|
// Comment is an optional message that can be set when committing or
|
||||||
|
// importing the image.
|
||||||
|
Comment string
|
||||||
|
|
||||||
|
// Created is the date and time at which the image was created, formatted in
|
||||||
|
// RFC 3339 nano-seconds (time.RFC3339Nano).
|
||||||
|
//
|
||||||
|
// This information is only available if present in the image,
|
||||||
|
// and omitted otherwise.
|
||||||
|
Created string `json:",omitempty"`
|
||||||
|
|
||||||
|
// Container is the ID of the container that was used to create the image.
|
||||||
|
//
|
||||||
|
// Depending on how the image was created, this field may be empty.
|
||||||
|
//
|
||||||
|
// Deprecated: this field is omitted in API v1.45, but kept for backward compatibility.
|
||||||
|
Container string `json:",omitempty"`
|
||||||
|
|
||||||
|
// ContainerConfig is an optional field containing the configuration of the
|
||||||
|
// container that was last committed when creating the image.
|
||||||
|
//
|
||||||
|
// Previous versions of Docker builder used this field to store build cache,
|
||||||
|
// and it is not in active use anymore.
|
||||||
|
//
|
||||||
|
// Deprecated: this field is omitted in API v1.45, but kept for backward compatibility.
|
||||||
|
ContainerConfig *container.Config `json:",omitempty"`
|
||||||
|
|
||||||
|
// DockerVersion is the version of Docker that was used to build the image.
|
||||||
|
//
|
||||||
|
// Depending on how the image was created, this field may be empty.
|
||||||
|
DockerVersion string
|
||||||
|
|
||||||
|
// Author is the name of the author that was specified when committing the
|
||||||
|
// image, or as specified through MAINTAINER (deprecated) in the Dockerfile.
|
||||||
|
Author string
|
||||||
|
Config *container.Config
|
||||||
|
|
||||||
|
// Architecture is the hardware CPU architecture that the image runs on.
|
||||||
|
Architecture string
|
||||||
|
|
||||||
|
// Variant is the CPU architecture variant (presently ARM-only).
|
||||||
|
Variant string `json:",omitempty"`
|
||||||
|
|
||||||
|
// OS is the Operating System the image is built to run on.
|
||||||
|
Os string
|
||||||
|
|
||||||
|
// OsVersion is the version of the Operating System the image is built to
|
||||||
|
// run on (especially for Windows).
|
||||||
|
OsVersion string `json:",omitempty"`
|
||||||
|
|
||||||
|
// Size is the total size of the image including all layers it is composed of.
|
||||||
|
Size int64
|
||||||
|
|
||||||
|
// VirtualSize is the total size of the image including all layers it is
|
||||||
|
// composed of.
|
||||||
|
//
|
||||||
|
// Deprecated: this field is omitted in API v1.44, but kept for backward compatibility. Use Size instead.
|
||||||
|
VirtualSize int64 `json:"VirtualSize,omitempty"`
|
||||||
|
|
||||||
|
// GraphDriver holds information about the storage driver used to store the
|
||||||
|
// container's and image's filesystem.
|
||||||
|
GraphDriver storage.DriverData
|
||||||
|
|
||||||
|
// RootFS contains information about the image's RootFS, including the
|
||||||
|
// layer IDs.
|
||||||
|
RootFS RootFS
|
||||||
|
|
||||||
|
// Metadata of the image in the local cache.
|
||||||
|
//
|
||||||
|
// This information is local to the daemon, and not part of the image itself.
|
||||||
|
Metadata Metadata
|
||||||
|
}
|
|
@ -1,13 +1,13 @@
|
||||||
package types
|
package storage
|
||||||
|
|
||||||
// This file was generated by the swagger tool.
|
// This file was generated by the swagger tool.
|
||||||
// Editing this file might prove futile when you re-run the swagger generate command
|
// Editing this file might prove futile when you re-run the swagger generate command
|
||||||
|
|
||||||
// GraphDriverData Information about the storage driver used to store the container's and
|
// DriverData Information about the storage driver used to store the container's and
|
||||||
// image's filesystem.
|
// image's filesystem.
|
||||||
//
|
//
|
||||||
// swagger:model GraphDriverData
|
// swagger:model DriverData
|
||||||
type GraphDriverData struct {
|
type DriverData struct {
|
||||||
|
|
||||||
// Low-level storage metadata, provided as key/value pairs.
|
// Low-level storage metadata, provided as key/value pairs.
|
||||||
//
|
//
|
|
@ -77,9 +77,6 @@ type Info struct {
|
||||||
|
|
||||||
Containerd *ContainerdInfo `json:",omitempty"`
|
Containerd *ContainerdInfo `json:",omitempty"`
|
||||||
|
|
||||||
// Legacy API fields for older API versions.
|
|
||||||
legacyFields
|
|
||||||
|
|
||||||
// Warnings contains a slice of warnings that occurred while collecting
|
// Warnings contains a slice of warnings that occurred while collecting
|
||||||
// system information. These warnings are intended to be informational
|
// system information. These warnings are intended to be informational
|
||||||
// messages for the user, and are not intended to be parsed / used for
|
// messages for the user, and are not intended to be parsed / used for
|
||||||
|
@ -124,10 +121,6 @@ type ContainerdNamespaces struct {
|
||||||
Plugins string
|
Plugins string
|
||||||
}
|
}
|
||||||
|
|
||||||
type legacyFields struct {
|
|
||||||
ExecutionDriver string `json:",omitempty"` // Deprecated: deprecated since API v1.25, but returned for older versions.
|
|
||||||
}
|
|
||||||
|
|
||||||
// PluginsInfo is a temp struct holding Plugins name
|
// PluginsInfo is a temp struct holding Plugins name
|
||||||
// registered with docker daemon. It is used by [Info] struct
|
// registered with docker daemon. It is used by [Info] struct
|
||||||
type PluginsInfo struct {
|
type PluginsInfo struct {
|
||||||
|
|
|
@ -6,11 +6,8 @@ import (
|
||||||
"github.com/docker/docker/api/types/container"
|
"github.com/docker/docker/api/types/container"
|
||||||
"github.com/docker/docker/api/types/filters"
|
"github.com/docker/docker/api/types/filters"
|
||||||
"github.com/docker/docker/api/types/image"
|
"github.com/docker/docker/api/types/image"
|
||||||
"github.com/docker/docker/api/types/mount"
|
|
||||||
"github.com/docker/docker/api/types/network"
|
|
||||||
"github.com/docker/docker/api/types/swarm"
|
"github.com/docker/docker/api/types/swarm"
|
||||||
"github.com/docker/docker/api/types/volume"
|
"github.com/docker/docker/api/types/volume"
|
||||||
"github.com/docker/go-connections/nat"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@ -21,145 +18,6 @@ const (
|
||||||
MediaTypeMultiplexedStream = "application/vnd.docker.multiplexed-stream"
|
MediaTypeMultiplexedStream = "application/vnd.docker.multiplexed-stream"
|
||||||
)
|
)
|
||||||
|
|
||||||
// RootFS returns Image's RootFS description including the layer IDs.
|
|
||||||
type RootFS struct {
|
|
||||||
Type string `json:",omitempty"`
|
|
||||||
Layers []string `json:",omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// ImageInspect contains response of Engine API:
|
|
||||||
// GET "/images/{name:.*}/json"
|
|
||||||
type ImageInspect struct {
|
|
||||||
// ID is the content-addressable ID of an image.
|
|
||||||
//
|
|
||||||
// This identifier is a content-addressable digest calculated from the
|
|
||||||
// image's configuration (which includes the digests of layers used by
|
|
||||||
// the image).
|
|
||||||
//
|
|
||||||
// Note that this digest differs from the `RepoDigests` below, which
|
|
||||||
// holds digests of image manifests that reference the image.
|
|
||||||
ID string `json:"Id"`
|
|
||||||
|
|
||||||
// RepoTags is a list of image names/tags in the local image cache that
|
|
||||||
// reference this image.
|
|
||||||
//
|
|
||||||
// Multiple image tags can refer to the same image, and this list may be
|
|
||||||
// empty if no tags reference the image, in which case the image is
|
|
||||||
// "untagged", in which case it can still be referenced by its ID.
|
|
||||||
RepoTags []string
|
|
||||||
|
|
||||||
// RepoDigests is a list of content-addressable digests of locally available
|
|
||||||
// image manifests that the image is referenced from. Multiple manifests can
|
|
||||||
// refer to the same image.
|
|
||||||
//
|
|
||||||
// These digests are usually only available if the image was either pulled
|
|
||||||
// from a registry, or if the image was pushed to a registry, which is when
|
|
||||||
// the manifest is generated and its digest calculated.
|
|
||||||
RepoDigests []string
|
|
||||||
|
|
||||||
// Parent is the ID of the parent image.
|
|
||||||
//
|
|
||||||
// Depending on how the image was created, this field may be empty and
|
|
||||||
// is only set for images that were built/created locally. This field
|
|
||||||
// is empty if the image was pulled from an image registry.
|
|
||||||
Parent string
|
|
||||||
|
|
||||||
// Comment is an optional message that can be set when committing or
|
|
||||||
// importing the image.
|
|
||||||
Comment string
|
|
||||||
|
|
||||||
// Created is the date and time at which the image was created, formatted in
|
|
||||||
// RFC 3339 nano-seconds (time.RFC3339Nano).
|
|
||||||
//
|
|
||||||
// This information is only available if present in the image,
|
|
||||||
// and omitted otherwise.
|
|
||||||
Created string `json:",omitempty"`
|
|
||||||
|
|
||||||
// Container is the ID of the container that was used to create the image.
|
|
||||||
//
|
|
||||||
// Depending on how the image was created, this field may be empty.
|
|
||||||
//
|
|
||||||
// Deprecated: this field is omitted in API v1.45, but kept for backward compatibility.
|
|
||||||
Container string `json:",omitempty"`
|
|
||||||
|
|
||||||
// ContainerConfig is an optional field containing the configuration of the
|
|
||||||
// container that was last committed when creating the image.
|
|
||||||
//
|
|
||||||
// Previous versions of Docker builder used this field to store build cache,
|
|
||||||
// and it is not in active use anymore.
|
|
||||||
//
|
|
||||||
// Deprecated: this field is omitted in API v1.45, but kept for backward compatibility.
|
|
||||||
ContainerConfig *container.Config `json:",omitempty"`
|
|
||||||
|
|
||||||
// DockerVersion is the version of Docker that was used to build the image.
|
|
||||||
//
|
|
||||||
// Depending on how the image was created, this field may be empty.
|
|
||||||
DockerVersion string
|
|
||||||
|
|
||||||
// Author is the name of the author that was specified when committing the
|
|
||||||
// image, or as specified through MAINTAINER (deprecated) in the Dockerfile.
|
|
||||||
Author string
|
|
||||||
Config *container.Config
|
|
||||||
|
|
||||||
// Architecture is the hardware CPU architecture that the image runs on.
|
|
||||||
Architecture string
|
|
||||||
|
|
||||||
// Variant is the CPU architecture variant (presently ARM-only).
|
|
||||||
Variant string `json:",omitempty"`
|
|
||||||
|
|
||||||
// OS is the Operating System the image is built to run on.
|
|
||||||
Os string
|
|
||||||
|
|
||||||
// OsVersion is the version of the Operating System the image is built to
|
|
||||||
// run on (especially for Windows).
|
|
||||||
OsVersion string `json:",omitempty"`
|
|
||||||
|
|
||||||
// Size is the total size of the image including all layers it is composed of.
|
|
||||||
Size int64
|
|
||||||
|
|
||||||
// VirtualSize is the total size of the image including all layers it is
|
|
||||||
// composed of.
|
|
||||||
//
|
|
||||||
// Deprecated: this field is omitted in API v1.44, but kept for backward compatibility. Use Size instead.
|
|
||||||
VirtualSize int64 `json:"VirtualSize,omitempty"`
|
|
||||||
|
|
||||||
// GraphDriver holds information about the storage driver used to store the
|
|
||||||
// container's and image's filesystem.
|
|
||||||
GraphDriver GraphDriverData
|
|
||||||
|
|
||||||
// RootFS contains information about the image's RootFS, including the
|
|
||||||
// layer IDs.
|
|
||||||
RootFS RootFS
|
|
||||||
|
|
||||||
// Metadata of the image in the local cache.
|
|
||||||
//
|
|
||||||
// This information is local to the daemon, and not part of the image itself.
|
|
||||||
Metadata image.Metadata
|
|
||||||
}
|
|
||||||
|
|
||||||
// Container contains response of Engine API:
|
|
||||||
// GET "/containers/json"
|
|
||||||
type Container struct {
|
|
||||||
ID string `json:"Id"`
|
|
||||||
Names []string
|
|
||||||
Image string
|
|
||||||
ImageID string
|
|
||||||
Command string
|
|
||||||
Created int64
|
|
||||||
Ports []Port
|
|
||||||
SizeRw int64 `json:",omitempty"`
|
|
||||||
SizeRootFs int64 `json:",omitempty"`
|
|
||||||
Labels map[string]string
|
|
||||||
State string
|
|
||||||
Status string
|
|
||||||
HostConfig struct {
|
|
||||||
NetworkMode string `json:",omitempty"`
|
|
||||||
Annotations map[string]string `json:",omitempty"`
|
|
||||||
}
|
|
||||||
NetworkSettings *SummaryNetworkSettings
|
|
||||||
Mounts []MountPoint
|
|
||||||
}
|
|
||||||
|
|
||||||
// Ping contains response of Engine API:
|
// Ping contains response of Engine API:
|
||||||
// GET "/_ping"
|
// GET "/_ping"
|
||||||
type Ping struct {
|
type Ping struct {
|
||||||
|
@ -205,176 +63,6 @@ type Version struct {
|
||||||
BuildTime string `json:",omitempty"`
|
BuildTime string `json:",omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// HealthcheckResult stores information about a single run of a healthcheck probe
|
|
||||||
type HealthcheckResult struct {
|
|
||||||
Start time.Time // Start is the time this check started
|
|
||||||
End time.Time // End is the time this check ended
|
|
||||||
ExitCode int // ExitCode meanings: 0=healthy, 1=unhealthy, 2=reserved (considered unhealthy), else=error running probe
|
|
||||||
Output string // Output from last check
|
|
||||||
}
|
|
||||||
|
|
||||||
// Health states
|
|
||||||
const (
|
|
||||||
NoHealthcheck = "none" // Indicates there is no healthcheck
|
|
||||||
Starting = "starting" // Starting indicates that the container is not yet ready
|
|
||||||
Healthy = "healthy" // Healthy indicates that the container is running correctly
|
|
||||||
Unhealthy = "unhealthy" // Unhealthy indicates that the container has a problem
|
|
||||||
)
|
|
||||||
|
|
||||||
// Health stores information about the container's healthcheck results
|
|
||||||
type Health struct {
|
|
||||||
Status string // Status is one of Starting, Healthy or Unhealthy
|
|
||||||
FailingStreak int // FailingStreak is the number of consecutive failures
|
|
||||||
Log []*HealthcheckResult // Log contains the last few results (oldest first)
|
|
||||||
}
|
|
||||||
|
|
||||||
// ContainerState stores container's running state
|
|
||||||
// it's part of ContainerJSONBase and will return by "inspect" command
|
|
||||||
type ContainerState struct {
|
|
||||||
Status string // String representation of the container state. Can be one of "created", "running", "paused", "restarting", "removing", "exited", or "dead"
|
|
||||||
Running bool
|
|
||||||
Paused bool
|
|
||||||
Restarting bool
|
|
||||||
OOMKilled bool
|
|
||||||
Dead bool
|
|
||||||
Pid int
|
|
||||||
ExitCode int
|
|
||||||
Error string
|
|
||||||
StartedAt string
|
|
||||||
FinishedAt string
|
|
||||||
Health *Health `json:",omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// ContainerJSONBase contains response of Engine API:
|
|
||||||
// GET "/containers/{name:.*}/json"
|
|
||||||
type ContainerJSONBase struct {
|
|
||||||
ID string `json:"Id"`
|
|
||||||
Created string
|
|
||||||
Path string
|
|
||||||
Args []string
|
|
||||||
State *ContainerState
|
|
||||||
Image string
|
|
||||||
ResolvConfPath string
|
|
||||||
HostnamePath string
|
|
||||||
HostsPath string
|
|
||||||
LogPath string
|
|
||||||
Node *ContainerNode `json:",omitempty"` // Deprecated: Node was only propagated by Docker Swarm standalone API. It sill be removed in the next release.
|
|
||||||
Name string
|
|
||||||
RestartCount int
|
|
||||||
Driver string
|
|
||||||
Platform string
|
|
||||||
MountLabel string
|
|
||||||
ProcessLabel string
|
|
||||||
AppArmorProfile string
|
|
||||||
ExecIDs []string
|
|
||||||
HostConfig *container.HostConfig
|
|
||||||
GraphDriver GraphDriverData
|
|
||||||
SizeRw *int64 `json:",omitempty"`
|
|
||||||
SizeRootFs *int64 `json:",omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// ContainerJSON is newly used struct along with MountPoint
|
|
||||||
type ContainerJSON struct {
|
|
||||||
*ContainerJSONBase
|
|
||||||
Mounts []MountPoint
|
|
||||||
Config *container.Config
|
|
||||||
NetworkSettings *NetworkSettings
|
|
||||||
}
|
|
||||||
|
|
||||||
// NetworkSettings exposes the network settings in the api
|
|
||||||
type NetworkSettings struct {
|
|
||||||
NetworkSettingsBase
|
|
||||||
DefaultNetworkSettings
|
|
||||||
Networks map[string]*network.EndpointSettings
|
|
||||||
}
|
|
||||||
|
|
||||||
// SummaryNetworkSettings provides a summary of container's networks
|
|
||||||
// in /containers/json
|
|
||||||
type SummaryNetworkSettings struct {
|
|
||||||
Networks map[string]*network.EndpointSettings
|
|
||||||
}
|
|
||||||
|
|
||||||
// NetworkSettingsBase holds networking state for a container when inspecting it.
|
|
||||||
type NetworkSettingsBase struct {
|
|
||||||
Bridge string // Bridge contains the name of the default bridge interface iff it was set through the daemon --bridge flag.
|
|
||||||
SandboxID string // SandboxID uniquely represents a container's network stack
|
|
||||||
SandboxKey string // SandboxKey identifies the sandbox
|
|
||||||
Ports nat.PortMap // Ports is a collection of PortBinding indexed by Port
|
|
||||||
|
|
||||||
// HairpinMode specifies if hairpin NAT should be enabled on the virtual interface
|
|
||||||
//
|
|
||||||
// Deprecated: This field is never set and will be removed in a future release.
|
|
||||||
HairpinMode bool
|
|
||||||
// LinkLocalIPv6Address is an IPv6 unicast address using the link-local prefix
|
|
||||||
//
|
|
||||||
// Deprecated: This field is never set and will be removed in a future release.
|
|
||||||
LinkLocalIPv6Address string
|
|
||||||
// LinkLocalIPv6PrefixLen is the prefix length of an IPv6 unicast address
|
|
||||||
//
|
|
||||||
// Deprecated: This field is never set and will be removed in a future release.
|
|
||||||
LinkLocalIPv6PrefixLen int
|
|
||||||
SecondaryIPAddresses []network.Address // Deprecated: This field is never set and will be removed in a future release.
|
|
||||||
SecondaryIPv6Addresses []network.Address // Deprecated: This field is never set and will be removed in a future release.
|
|
||||||
}
|
|
||||||
|
|
||||||
// DefaultNetworkSettings holds network information
|
|
||||||
// during the 2 release deprecation period.
|
|
||||||
// It will be removed in Docker 1.11.
|
|
||||||
type DefaultNetworkSettings struct {
|
|
||||||
EndpointID string // EndpointID uniquely represents a service endpoint in a Sandbox
|
|
||||||
Gateway string // Gateway holds the gateway address for the network
|
|
||||||
GlobalIPv6Address string // GlobalIPv6Address holds network's global IPv6 address
|
|
||||||
GlobalIPv6PrefixLen int // GlobalIPv6PrefixLen represents mask length of network's global IPv6 address
|
|
||||||
IPAddress string // IPAddress holds the IPv4 address for the network
|
|
||||||
IPPrefixLen int // IPPrefixLen represents mask length of network's IPv4 address
|
|
||||||
IPv6Gateway string // IPv6Gateway holds gateway address specific for IPv6
|
|
||||||
MacAddress string // MacAddress holds the MAC address for the network
|
|
||||||
}
|
|
||||||
|
|
||||||
// MountPoint represents a mount point configuration inside the container.
|
|
||||||
// This is used for reporting the mountpoints in use by a container.
|
|
||||||
type MountPoint struct {
|
|
||||||
// Type is the type of mount, see `Type<foo>` definitions in
|
|
||||||
// github.com/docker/docker/api/types/mount.Type
|
|
||||||
Type mount.Type `json:",omitempty"`
|
|
||||||
|
|
||||||
// Name is the name reference to the underlying data defined by `Source`
|
|
||||||
// e.g., the volume name.
|
|
||||||
Name string `json:",omitempty"`
|
|
||||||
|
|
||||||
// Source is the source location of the mount.
|
|
||||||
//
|
|
||||||
// For volumes, this contains the storage location of the volume (within
|
|
||||||
// `/var/lib/docker/volumes/`). For bind-mounts, and `npipe`, this contains
|
|
||||||
// the source (host) part of the bind-mount. For `tmpfs` mount points, this
|
|
||||||
// field is empty.
|
|
||||||
Source string
|
|
||||||
|
|
||||||
// Destination is the path relative to the container root (`/`) where the
|
|
||||||
// Source is mounted inside the container.
|
|
||||||
Destination string
|
|
||||||
|
|
||||||
// Driver is the volume driver used to create the volume (if it is a volume).
|
|
||||||
Driver string `json:",omitempty"`
|
|
||||||
|
|
||||||
// Mode is a comma separated list of options supplied by the user when
|
|
||||||
// creating the bind/volume mount.
|
|
||||||
//
|
|
||||||
// The default is platform-specific (`"z"` on Linux, empty on Windows).
|
|
||||||
Mode string
|
|
||||||
|
|
||||||
// RW indicates whether the mount is mounted writable (read-write).
|
|
||||||
RW bool
|
|
||||||
|
|
||||||
// Propagation describes how mounts are propagated from the host into the
|
|
||||||
// mount point, and vice-versa. Refer to the Linux kernel documentation
|
|
||||||
// for details:
|
|
||||||
// https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt
|
|
||||||
//
|
|
||||||
// This field is not used on Windows.
|
|
||||||
Propagation mount.Propagation
|
|
||||||
}
|
|
||||||
|
|
||||||
// DiskUsageObject represents an object type used for disk usage query filtering.
|
// DiskUsageObject represents an object type used for disk usage query filtering.
|
||||||
type DiskUsageObject string
|
type DiskUsageObject string
|
||||||
|
|
||||||
|
@ -401,7 +89,7 @@ type DiskUsageOptions struct {
|
||||||
type DiskUsage struct {
|
type DiskUsage struct {
|
||||||
LayersSize int64
|
LayersSize int64
|
||||||
Images []*image.Summary
|
Images []*image.Summary
|
||||||
Containers []*Container
|
Containers []*container.Summary
|
||||||
Volumes []*volume.Volume
|
Volumes []*volume.Volume
|
||||||
BuildCache []*BuildCache
|
BuildCache []*BuildCache
|
||||||
BuilderSize int64 `json:",omitempty"` // Deprecated: deprecated in API 1.38, and no longer used since API 1.40.
|
BuilderSize int64 `json:",omitempty"` // Deprecated: deprecated in API 1.38, and no longer used since API 1.40.
|
||||||
|
|
|
@ -2,209 +2,98 @@ package types
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/docker/docker/api/types/container"
|
"github.com/docker/docker/api/types/container"
|
||||||
"github.com/docker/docker/api/types/events"
|
|
||||||
"github.com/docker/docker/api/types/image"
|
"github.com/docker/docker/api/types/image"
|
||||||
"github.com/docker/docker/api/types/network"
|
"github.com/docker/docker/api/types/storage"
|
||||||
"github.com/docker/docker/api/types/registry"
|
|
||||||
"github.com/docker/docker/api/types/volume"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// ImagesPruneReport contains the response for Engine API:
|
// ContainerJSONBase contains response of Engine API GET "/containers/{name:.*}/json"
|
||||||
// POST "/images/prune"
|
// for API version 1.18 and older.
|
||||||
//
|
//
|
||||||
// Deprecated: use [image.PruneReport].
|
// Deprecated: use [container.InspectResponse] or [container.ContainerJSONBase]. It will be removed in the next release.
|
||||||
type ImagesPruneReport = image.PruneReport
|
type ContainerJSONBase = container.ContainerJSONBase
|
||||||
|
|
||||||
// VolumesPruneReport contains the response for Engine API:
|
// ContainerJSON is the response for the GET "/containers/{name:.*}/json"
|
||||||
// POST "/volumes/prune".
|
// endpoint.
|
||||||
//
|
//
|
||||||
// Deprecated: use [volume.PruneReport].
|
// Deprecated: use [container.InspectResponse]. It will be removed in the next release.
|
||||||
type VolumesPruneReport = volume.PruneReport
|
type ContainerJSON = container.InspectResponse
|
||||||
|
|
||||||
// NetworkCreateRequest is the request message sent to the server for network create call.
|
// Container contains response of Engine API:
|
||||||
|
// GET "/containers/json"
|
||||||
//
|
//
|
||||||
// Deprecated: use [network.CreateRequest].
|
// Deprecated: use [container.Summary].
|
||||||
type NetworkCreateRequest = network.CreateRequest
|
type Container = container.Summary
|
||||||
|
|
||||||
// NetworkCreate is the expected body of the "create network" http request message
|
// ContainerState stores container's running state
|
||||||
//
|
//
|
||||||
// Deprecated: use [network.CreateOptions].
|
// Deprecated: use [container.State].
|
||||||
type NetworkCreate = network.CreateOptions
|
type ContainerState = container.State
|
||||||
|
|
||||||
// NetworkListOptions holds parameters to filter the list of networks with.
|
// NetworkSettings exposes the network settings in the api.
|
||||||
//
|
//
|
||||||
// Deprecated: use [network.ListOptions].
|
// Deprecated: use [container.NetworkSettings].
|
||||||
type NetworkListOptions = network.ListOptions
|
type NetworkSettings = container.NetworkSettings
|
||||||
|
|
||||||
// NetworkCreateResponse is the response message sent by the server for network create call.
|
// NetworkSettingsBase holds networking state for a container when inspecting it.
|
||||||
//
|
//
|
||||||
// Deprecated: use [network.CreateResponse].
|
// Deprecated: use [container.NetworkSettingsBase].
|
||||||
type NetworkCreateResponse = network.CreateResponse
|
type NetworkSettingsBase = container.NetworkSettingsBase
|
||||||
|
|
||||||
// NetworkInspectOptions holds parameters to inspect network.
|
// DefaultNetworkSettings holds network information
|
||||||
|
// during the 2 release deprecation period.
|
||||||
|
// It will be removed in Docker 1.11.
|
||||||
//
|
//
|
||||||
// Deprecated: use [network.InspectOptions].
|
// Deprecated: use [container.DefaultNetworkSettings].
|
||||||
type NetworkInspectOptions = network.InspectOptions
|
type DefaultNetworkSettings = container.DefaultNetworkSettings
|
||||||
|
|
||||||
// NetworkConnect represents the data to be used to connect a container to the network
|
// SummaryNetworkSettings provides a summary of container's networks
|
||||||
|
// in /containers/json.
|
||||||
//
|
//
|
||||||
// Deprecated: use [network.ConnectOptions].
|
// Deprecated: use [container.NetworkSettingsSummary].
|
||||||
type NetworkConnect = network.ConnectOptions
|
type SummaryNetworkSettings = container.NetworkSettingsSummary
|
||||||
|
|
||||||
// NetworkDisconnect represents the data to be used to disconnect a container from the network
|
// Health states
|
||||||
//
|
const (
|
||||||
// Deprecated: use [network.DisconnectOptions].
|
NoHealthcheck = container.NoHealthcheck // Deprecated: use [container.NoHealthcheck].
|
||||||
type NetworkDisconnect = network.DisconnectOptions
|
Starting = container.Starting // Deprecated: use [container.Starting].
|
||||||
|
Healthy = container.Healthy // Deprecated: use [container.Healthy].
|
||||||
|
Unhealthy = container.Unhealthy // Deprecated: use [container.Unhealthy].
|
||||||
|
)
|
||||||
|
|
||||||
// EndpointResource contains network resources allocated and used for a container in a network.
|
// Health stores information about the container's healthcheck results.
|
||||||
//
|
//
|
||||||
// Deprecated: use [network.EndpointResource].
|
// Deprecated: use [container.Health].
|
||||||
type EndpointResource = network.EndpointResource
|
type Health = container.Health
|
||||||
|
|
||||||
// NetworkResource is the body of the "get network" http response message/
|
// HealthcheckResult stores information about a single run of a healthcheck probe.
|
||||||
//
|
//
|
||||||
// Deprecated: use [network.Inspect] or [network.Summary] (for list operations).
|
// Deprecated: use [container.HealthcheckResult].
|
||||||
type NetworkResource = network.Inspect
|
type HealthcheckResult = container.HealthcheckResult
|
||||||
|
|
||||||
// NetworksPruneReport contains the response for Engine API:
|
// MountPoint represents a mount point configuration inside the container.
|
||||||
// POST "/networks/prune"
|
// This is used for reporting the mountpoints in use by a container.
|
||||||
//
|
//
|
||||||
// Deprecated: use [network.PruneReport].
|
// Deprecated: use [container.MountPoint].
|
||||||
type NetworksPruneReport = network.PruneReport
|
type MountPoint = container.MountPoint
|
||||||
|
|
||||||
// ExecConfig is a small subset of the Config struct that holds the configuration
|
// Port An open port on a container
|
||||||
// for the exec feature of docker.
|
|
||||||
//
|
//
|
||||||
// Deprecated: use [container.ExecOptions].
|
// Deprecated: use [container.Port].
|
||||||
type ExecConfig = container.ExecOptions
|
type Port = container.Port
|
||||||
|
|
||||||
// ExecStartCheck is a temp struct used by execStart
|
// GraphDriverData Information about the storage driver used to store the container's and
|
||||||
// Config fields is part of ExecConfig in runconfig package
|
// image's filesystem.
|
||||||
//
|
//
|
||||||
// Deprecated: use [container.ExecStartOptions] or [container.ExecAttachOptions].
|
// Deprecated: use [storage.DriverData].
|
||||||
type ExecStartCheck = container.ExecStartOptions
|
type GraphDriverData = storage.DriverData
|
||||||
|
|
||||||
// ContainerExecInspect holds information returned by exec inspect.
|
// RootFS returns Image's RootFS description including the layer IDs.
|
||||||
//
|
//
|
||||||
// Deprecated: use [container.ExecInspect].
|
// Deprecated: use [image.RootFS].
|
||||||
type ContainerExecInspect = container.ExecInspect
|
type RootFS = image.RootFS
|
||||||
|
|
||||||
// ContainersPruneReport contains the response for Engine API:
|
// ImageInspect contains response of Engine API:
|
||||||
// POST "/containers/prune"
|
// GET "/images/{name:.*}/json"
|
||||||
//
|
//
|
||||||
// Deprecated: use [container.PruneReport].
|
// Deprecated: use [image.InspectResponse].
|
||||||
type ContainersPruneReport = container.PruneReport
|
type ImageInspect = image.InspectResponse
|
||||||
|
|
||||||
// ContainerPathStat is used to encode the header from
|
|
||||||
// GET "/containers/{name:.*}/archive"
|
|
||||||
// "Name" is the file or directory name.
|
|
||||||
//
|
|
||||||
// Deprecated: use [container.PathStat].
|
|
||||||
type ContainerPathStat = container.PathStat
|
|
||||||
|
|
||||||
// CopyToContainerOptions holds information
|
|
||||||
// about files to copy into a container.
|
|
||||||
//
|
|
||||||
// Deprecated: use [container.CopyToContainerOptions],
|
|
||||||
type CopyToContainerOptions = container.CopyToContainerOptions
|
|
||||||
|
|
||||||
// ContainerStats contains response of Engine API:
|
|
||||||
// GET "/stats"
|
|
||||||
//
|
|
||||||
// Deprecated: use [container.StatsResponseReader].
|
|
||||||
type ContainerStats = container.StatsResponseReader
|
|
||||||
|
|
||||||
// ThrottlingData stores CPU throttling stats of one running container.
|
|
||||||
// Not used on Windows.
|
|
||||||
//
|
|
||||||
// Deprecated: use [container.ThrottlingData].
|
|
||||||
type ThrottlingData = container.ThrottlingData
|
|
||||||
|
|
||||||
// CPUUsage stores All CPU stats aggregated since container inception.
|
|
||||||
//
|
|
||||||
// Deprecated: use [container.CPUUsage].
|
|
||||||
type CPUUsage = container.CPUUsage
|
|
||||||
|
|
||||||
// CPUStats aggregates and wraps all CPU related info of container
|
|
||||||
//
|
|
||||||
// Deprecated: use [container.CPUStats].
|
|
||||||
type CPUStats = container.CPUStats
|
|
||||||
|
|
||||||
// MemoryStats aggregates all memory stats since container inception on Linux.
|
|
||||||
// Windows returns stats for commit and private working set only.
|
|
||||||
//
|
|
||||||
// Deprecated: use [container.MemoryStats].
|
|
||||||
type MemoryStats = container.MemoryStats
|
|
||||||
|
|
||||||
// BlkioStatEntry is one small entity to store a piece of Blkio stats
|
|
||||||
// Not used on Windows.
|
|
||||||
//
|
|
||||||
// Deprecated: use [container.BlkioStatEntry].
|
|
||||||
type BlkioStatEntry = container.BlkioStatEntry
|
|
||||||
|
|
||||||
// BlkioStats stores All IO service stats for data read and write.
|
|
||||||
// This is a Linux specific structure as the differences between expressing
|
|
||||||
// block I/O on Windows and Linux are sufficiently significant to make
|
|
||||||
// little sense attempting to morph into a combined structure.
|
|
||||||
//
|
|
||||||
// Deprecated: use [container.BlkioStats].
|
|
||||||
type BlkioStats = container.BlkioStats
|
|
||||||
|
|
||||||
// StorageStats is the disk I/O stats for read/write on Windows.
|
|
||||||
//
|
|
||||||
// Deprecated: use [container.StorageStats].
|
|
||||||
type StorageStats = container.StorageStats
|
|
||||||
|
|
||||||
// NetworkStats aggregates the network stats of one container
|
|
||||||
//
|
|
||||||
// Deprecated: use [container.NetworkStats].
|
|
||||||
type NetworkStats = container.NetworkStats
|
|
||||||
|
|
||||||
// PidsStats contains the stats of a container's pids
|
|
||||||
//
|
|
||||||
// Deprecated: use [container.PidsStats].
|
|
||||||
type PidsStats = container.PidsStats
|
|
||||||
|
|
||||||
// Stats is Ultimate struct aggregating all types of stats of one container
|
|
||||||
//
|
|
||||||
// Deprecated: use [container.Stats].
|
|
||||||
type Stats = container.Stats
|
|
||||||
|
|
||||||
// StatsJSON is newly used Networks
|
|
||||||
//
|
|
||||||
// Deprecated: use [container.StatsResponse].
|
|
||||||
type StatsJSON = container.StatsResponse
|
|
||||||
|
|
||||||
// EventsOptions holds parameters to filter events with.
|
|
||||||
//
|
|
||||||
// Deprecated: use [events.ListOptions].
|
|
||||||
type EventsOptions = events.ListOptions
|
|
||||||
|
|
||||||
// ImageSearchOptions holds parameters to search images with.
|
|
||||||
//
|
|
||||||
// Deprecated: use [registry.SearchOptions].
|
|
||||||
type ImageSearchOptions = registry.SearchOptions
|
|
||||||
|
|
||||||
// ImageImportSource holds source information for ImageImport
|
|
||||||
//
|
|
||||||
// Deprecated: use [image.ImportSource].
|
|
||||||
type ImageImportSource image.ImportSource
|
|
||||||
|
|
||||||
// ImageLoadResponse returns information to the client about a load process.
|
|
||||||
//
|
|
||||||
// Deprecated: use [image.LoadResponse].
|
|
||||||
type ImageLoadResponse = image.LoadResponse
|
|
||||||
|
|
||||||
// ContainerNode stores information about the node that a container
|
|
||||||
// is running on. It's only used by the Docker Swarm standalone API.
|
|
||||||
//
|
|
||||||
// Deprecated: ContainerNode was used for the classic Docker Swarm standalone API. It will be removed in the next release.
|
|
||||||
type ContainerNode struct {
|
|
||||||
ID string
|
|
||||||
IPAddress string `json:"IP"`
|
|
||||||
Addr string
|
|
||||||
Name string
|
|
||||||
Cpus int
|
|
||||||
Memory int64
|
|
||||||
Labels map[string]string
|
|
||||||
}
|
|
||||||
|
|
|
@ -7,29 +7,29 @@ import (
|
||||||
"io"
|
"io"
|
||||||
"net/url"
|
"net/url"
|
||||||
|
|
||||||
"github.com/docker/docker/api/types"
|
"github.com/docker/docker/api/types/container"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ContainerInspect returns the container information.
|
// ContainerInspect returns the container information.
|
||||||
func (cli *Client) ContainerInspect(ctx context.Context, containerID string) (types.ContainerJSON, error) {
|
func (cli *Client) ContainerInspect(ctx context.Context, containerID string) (container.InspectResponse, error) {
|
||||||
if containerID == "" {
|
if containerID == "" {
|
||||||
return types.ContainerJSON{}, objectNotFoundError{object: "container", id: containerID}
|
return container.InspectResponse{}, objectNotFoundError{object: "container", id: containerID}
|
||||||
}
|
}
|
||||||
serverResp, err := cli.get(ctx, "/containers/"+containerID+"/json", nil, nil)
|
serverResp, err := cli.get(ctx, "/containers/"+containerID+"/json", nil, nil)
|
||||||
defer ensureReaderClosed(serverResp)
|
defer ensureReaderClosed(serverResp)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return types.ContainerJSON{}, err
|
return container.InspectResponse{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
var response types.ContainerJSON
|
var response container.InspectResponse
|
||||||
err = json.NewDecoder(serverResp.body).Decode(&response)
|
err = json.NewDecoder(serverResp.body).Decode(&response)
|
||||||
return response, err
|
return response, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// ContainerInspectWithRaw returns the container information and its raw representation.
|
// ContainerInspectWithRaw returns the container information and its raw representation.
|
||||||
func (cli *Client) ContainerInspectWithRaw(ctx context.Context, containerID string, getSize bool) (types.ContainerJSON, []byte, error) {
|
func (cli *Client) ContainerInspectWithRaw(ctx context.Context, containerID string, getSize bool) (container.InspectResponse, []byte, error) {
|
||||||
if containerID == "" {
|
if containerID == "" {
|
||||||
return types.ContainerJSON{}, nil, objectNotFoundError{object: "container", id: containerID}
|
return container.InspectResponse{}, nil, objectNotFoundError{object: "container", id: containerID}
|
||||||
}
|
}
|
||||||
query := url.Values{}
|
query := url.Values{}
|
||||||
if getSize {
|
if getSize {
|
||||||
|
@ -38,15 +38,15 @@ func (cli *Client) ContainerInspectWithRaw(ctx context.Context, containerID stri
|
||||||
serverResp, err := cli.get(ctx, "/containers/"+containerID+"/json", query, nil)
|
serverResp, err := cli.get(ctx, "/containers/"+containerID+"/json", query, nil)
|
||||||
defer ensureReaderClosed(serverResp)
|
defer ensureReaderClosed(serverResp)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return types.ContainerJSON{}, nil, err
|
return container.InspectResponse{}, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
body, err := io.ReadAll(serverResp.body)
|
body, err := io.ReadAll(serverResp.body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return types.ContainerJSON{}, nil, err
|
return container.InspectResponse{}, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
var response types.ContainerJSON
|
var response container.InspectResponse
|
||||||
rdr := bytes.NewReader(body)
|
rdr := bytes.NewReader(body)
|
||||||
err = json.NewDecoder(rdr).Decode(&response)
|
err = json.NewDecoder(rdr).Decode(&response)
|
||||||
return response, body, err
|
return response, body, err
|
||||||
|
|
|
@ -6,13 +6,12 @@ import (
|
||||||
"net/url"
|
"net/url"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
"github.com/docker/docker/api/types"
|
|
||||||
"github.com/docker/docker/api/types/container"
|
"github.com/docker/docker/api/types/container"
|
||||||
"github.com/docker/docker/api/types/filters"
|
"github.com/docker/docker/api/types/filters"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ContainerList returns the list of containers in the docker host.
|
// ContainerList returns the list of containers in the docker host.
|
||||||
func (cli *Client) ContainerList(ctx context.Context, options container.ListOptions) ([]types.Container, error) {
|
func (cli *Client) ContainerList(ctx context.Context, options container.ListOptions) ([]container.Summary, error) {
|
||||||
query := url.Values{}
|
query := url.Values{}
|
||||||
|
|
||||||
if options.All {
|
if options.All {
|
||||||
|
@ -51,7 +50,7 @@ func (cli *Client) ContainerList(ctx context.Context, options container.ListOpti
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
var containers []types.Container
|
var containers []container.Summary
|
||||||
err = json.NewDecoder(resp.body).Decode(&containers)
|
err = json.NewDecoder(resp.body).Decode(&containers)
|
||||||
return containers, err
|
return containers, err
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,26 +6,26 @@ import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"io"
|
"io"
|
||||||
|
|
||||||
"github.com/docker/docker/api/types"
|
"github.com/docker/docker/api/types/image"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ImageInspectWithRaw returns the image information and its raw representation.
|
// ImageInspectWithRaw returns the image information and its raw representation.
|
||||||
func (cli *Client) ImageInspectWithRaw(ctx context.Context, imageID string) (types.ImageInspect, []byte, error) {
|
func (cli *Client) ImageInspectWithRaw(ctx context.Context, imageID string) (image.InspectResponse, []byte, error) {
|
||||||
if imageID == "" {
|
if imageID == "" {
|
||||||
return types.ImageInspect{}, nil, objectNotFoundError{object: "image", id: imageID}
|
return image.InspectResponse{}, nil, objectNotFoundError{object: "image", id: imageID}
|
||||||
}
|
}
|
||||||
serverResp, err := cli.get(ctx, "/images/"+imageID+"/json", nil, nil)
|
serverResp, err := cli.get(ctx, "/images/"+imageID+"/json", nil, nil)
|
||||||
defer ensureReaderClosed(serverResp)
|
defer ensureReaderClosed(serverResp)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return types.ImageInspect{}, nil, err
|
return image.InspectResponse{}, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
body, err := io.ReadAll(serverResp.body)
|
body, err := io.ReadAll(serverResp.body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return types.ImageInspect{}, nil, err
|
return image.InspectResponse{}, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
var response types.ImageInspect
|
var response image.InspectResponse
|
||||||
rdr := bytes.NewReader(body)
|
rdr := bytes.NewReader(body)
|
||||||
err = json.NewDecoder(rdr).Decode(&response)
|
err = json.NewDecoder(rdr).Decode(&response)
|
||||||
return response, body, err
|
return response, body, err
|
||||||
|
|
|
@ -56,10 +56,10 @@ type ContainerAPIClient interface {
|
||||||
ContainerExecResize(ctx context.Context, execID string, options container.ResizeOptions) error
|
ContainerExecResize(ctx context.Context, execID string, options container.ResizeOptions) error
|
||||||
ContainerExecStart(ctx context.Context, execID string, options container.ExecStartOptions) error
|
ContainerExecStart(ctx context.Context, execID string, options container.ExecStartOptions) error
|
||||||
ContainerExport(ctx context.Context, container string) (io.ReadCloser, error)
|
ContainerExport(ctx context.Context, container string) (io.ReadCloser, error)
|
||||||
ContainerInspect(ctx context.Context, container string) (types.ContainerJSON, error)
|
ContainerInspect(ctx context.Context, container string) (container.InspectResponse, error)
|
||||||
ContainerInspectWithRaw(ctx context.Context, container string, getSize bool) (types.ContainerJSON, []byte, error)
|
ContainerInspectWithRaw(ctx context.Context, container string, getSize bool) (container.InspectResponse, []byte, error)
|
||||||
ContainerKill(ctx context.Context, container, signal string) error
|
ContainerKill(ctx context.Context, container, signal string) error
|
||||||
ContainerList(ctx context.Context, options container.ListOptions) ([]types.Container, error)
|
ContainerList(ctx context.Context, options container.ListOptions) ([]container.Summary, error)
|
||||||
ContainerLogs(ctx context.Context, container string, options container.LogsOptions) (io.ReadCloser, error)
|
ContainerLogs(ctx context.Context, container string, options container.LogsOptions) (io.ReadCloser, error)
|
||||||
ContainerPause(ctx context.Context, container string) error
|
ContainerPause(ctx context.Context, container string) error
|
||||||
ContainerRemove(ctx context.Context, container string, options container.RemoveOptions) error
|
ContainerRemove(ctx context.Context, container string, options container.RemoveOptions) error
|
||||||
|
@ -93,7 +93,7 @@ type ImageAPIClient interface {
|
||||||
ImageCreate(ctx context.Context, parentReference string, options image.CreateOptions) (io.ReadCloser, error)
|
ImageCreate(ctx context.Context, parentReference string, options image.CreateOptions) (io.ReadCloser, error)
|
||||||
ImageHistory(ctx context.Context, image string) ([]image.HistoryResponseItem, error)
|
ImageHistory(ctx context.Context, image string) ([]image.HistoryResponseItem, error)
|
||||||
ImageImport(ctx context.Context, source image.ImportSource, ref string, options image.ImportOptions) (io.ReadCloser, error)
|
ImageImport(ctx context.Context, source image.ImportSource, ref string, options image.ImportOptions) (io.ReadCloser, error)
|
||||||
ImageInspectWithRaw(ctx context.Context, image string) (types.ImageInspect, []byte, error)
|
ImageInspectWithRaw(ctx context.Context, image string) (image.InspectResponse, []byte, error)
|
||||||
ImageList(ctx context.Context, options image.ListOptions) ([]image.Summary, error)
|
ImageList(ctx context.Context, options image.ListOptions) ([]image.Summary, error)
|
||||||
ImageLoad(ctx context.Context, input io.Reader, quiet bool) (image.LoadResponse, error)
|
ImageLoad(ctx context.Context, input io.Reader, quiet bool) (image.LoadResponse, error)
|
||||||
ImagePull(ctx context.Context, ref string, options image.PullOptions) (io.ReadCloser, error)
|
ImagePull(ctx context.Context, ref string, options image.PullOptions) (io.ReadCloser, error)
|
||||||
|
|
|
@ -11,36 +11,37 @@ func FromStatusCode(err error, statusCode int) error {
|
||||||
}
|
}
|
||||||
switch statusCode {
|
switch statusCode {
|
||||||
case http.StatusNotFound:
|
case http.StatusNotFound:
|
||||||
err = NotFound(err)
|
return NotFound(err)
|
||||||
case http.StatusBadRequest:
|
case http.StatusBadRequest:
|
||||||
err = InvalidParameter(err)
|
return InvalidParameter(err)
|
||||||
case http.StatusConflict:
|
case http.StatusConflict:
|
||||||
err = Conflict(err)
|
return Conflict(err)
|
||||||
case http.StatusUnauthorized:
|
case http.StatusUnauthorized:
|
||||||
err = Unauthorized(err)
|
return Unauthorized(err)
|
||||||
case http.StatusServiceUnavailable:
|
case http.StatusServiceUnavailable:
|
||||||
err = Unavailable(err)
|
return Unavailable(err)
|
||||||
case http.StatusForbidden:
|
case http.StatusForbidden:
|
||||||
err = Forbidden(err)
|
return Forbidden(err)
|
||||||
case http.StatusNotModified:
|
case http.StatusNotModified:
|
||||||
err = NotModified(err)
|
return NotModified(err)
|
||||||
case http.StatusNotImplemented:
|
case http.StatusNotImplemented:
|
||||||
err = NotImplemented(err)
|
return NotImplemented(err)
|
||||||
case http.StatusInternalServerError:
|
case http.StatusInternalServerError:
|
||||||
if !IsSystem(err) && !IsUnknown(err) && !IsDataLoss(err) && !IsDeadline(err) && !IsCancelled(err) {
|
if IsCancelled(err) || IsSystem(err) || IsUnknown(err) || IsDataLoss(err) || IsDeadline(err) {
|
||||||
err = System(err)
|
return err
|
||||||
}
|
}
|
||||||
|
return System(err)
|
||||||
default:
|
default:
|
||||||
switch {
|
switch {
|
||||||
case statusCode >= 200 && statusCode < 400:
|
case statusCode >= 200 && statusCode < 400:
|
||||||
// it's a client error
|
// it's a client error
|
||||||
case statusCode >= 400 && statusCode < 500:
|
|
||||||
err = InvalidParameter(err)
|
|
||||||
case statusCode >= 500 && statusCode < 600:
|
|
||||||
err = System(err)
|
|
||||||
default:
|
|
||||||
err = Unknown(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return err
|
return err
|
||||||
|
case statusCode >= 400 && statusCode < 500:
|
||||||
|
return InvalidParameter(err)
|
||||||
|
case statusCode >= 500 && statusCode < 600:
|
||||||
|
return System(err)
|
||||||
|
default:
|
||||||
|
return Unknown(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,7 +56,7 @@ github.com/docker/distribution/registry/client/transport
|
||||||
github.com/docker/distribution/registry/storage/cache
|
github.com/docker/distribution/registry/storage/cache
|
||||||
github.com/docker/distribution/registry/storage/cache/memory
|
github.com/docker/distribution/registry/storage/cache/memory
|
||||||
github.com/docker/distribution/uuid
|
github.com/docker/distribution/uuid
|
||||||
# github.com/docker/docker v27.0.3+incompatible
|
# github.com/docker/docker v27.0.2-0.20240703234935-508cc7c61226+incompatible
|
||||||
## explicit
|
## explicit
|
||||||
github.com/docker/docker/api
|
github.com/docker/docker/api
|
||||||
github.com/docker/docker/api/types
|
github.com/docker/docker/api/types
|
||||||
|
@ -70,6 +70,7 @@ github.com/docker/docker/api/types/image
|
||||||
github.com/docker/docker/api/types/mount
|
github.com/docker/docker/api/types/mount
|
||||||
github.com/docker/docker/api/types/network
|
github.com/docker/docker/api/types/network
|
||||||
github.com/docker/docker/api/types/registry
|
github.com/docker/docker/api/types/registry
|
||||||
|
github.com/docker/docker/api/types/storage
|
||||||
github.com/docker/docker/api/types/strslice
|
github.com/docker/docker/api/types/strslice
|
||||||
github.com/docker/docker/api/types/swarm
|
github.com/docker/docker/api/types/swarm
|
||||||
github.com/docker/docker/api/types/swarm/runtime
|
github.com/docker/docker/api/types/swarm/runtime
|
||||||
|
|
Loading…
Reference in New Issue