mirror of https://github.com/docker/cli.git
vendor: github.com/docker/docker a736d0701c41 (master, v27.0.0-dev)
full diff: 59996a493c...a736d0701c
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
parent
c481c64922
commit
43b840ed93
|
@ -17,8 +17,8 @@ import (
|
||||||
type fakeClient struct {
|
type fakeClient struct {
|
||||||
client.Client
|
client.Client
|
||||||
inspectFunc func(string) (types.ContainerJSON, error)
|
inspectFunc func(string) (types.ContainerJSON, error)
|
||||||
execInspectFunc func(execID string) (types.ContainerExecInspect, error)
|
execInspectFunc func(execID string) (container.ExecInspect, error)
|
||||||
execCreateFunc func(containerID string, config types.ExecConfig) (types.IDResponse, error)
|
execCreateFunc func(containerID string, options container.ExecOptions) (types.IDResponse, error)
|
||||||
createContainerFunc func(config *container.Config,
|
createContainerFunc func(config *container.Config,
|
||||||
hostConfig *container.HostConfig,
|
hostConfig *container.HostConfig,
|
||||||
networkingConfig *network.NetworkingConfig,
|
networkingConfig *network.NetworkingConfig,
|
||||||
|
@ -27,8 +27,8 @@ type fakeClient struct {
|
||||||
containerStartFunc func(containerID string, options container.StartOptions) error
|
containerStartFunc func(containerID string, options container.StartOptions) error
|
||||||
imageCreateFunc func(parentReference string, options image.CreateOptions) (io.ReadCloser, error)
|
imageCreateFunc func(parentReference string, options image.CreateOptions) (io.ReadCloser, error)
|
||||||
infoFunc func() (system.Info, error)
|
infoFunc func() (system.Info, error)
|
||||||
containerStatPathFunc func(containerID, path string) (types.ContainerPathStat, error)
|
containerStatPathFunc func(containerID, path string) (container.PathStat, error)
|
||||||
containerCopyFromFunc func(containerID, srcPath string) (io.ReadCloser, types.ContainerPathStat, 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) ([]types.Container, error)
|
||||||
|
@ -36,7 +36,7 @@ type fakeClient struct {
|
||||||
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
|
||||||
containerKillFunc func(ctx context.Context, containerID, signal string) error
|
containerKillFunc func(ctx context.Context, containerID, signal string) error
|
||||||
containerPruneFunc func(ctx context.Context, pruneFilters filters.Args) (types.ContainersPruneReport, error)
|
containerPruneFunc func(ctx context.Context, pruneFilters filters.Args) (container.PruneReport, error)
|
||||||
containerAttachFunc func(ctx context.Context, containerID string, options container.AttachOptions) (types.HijackedResponse, error)
|
containerAttachFunc func(ctx context.Context, containerID string, options container.AttachOptions) (types.HijackedResponse, error)
|
||||||
Version string
|
Version string
|
||||||
}
|
}
|
||||||
|
@ -55,21 +55,21 @@ func (f *fakeClient) ContainerInspect(_ context.Context, containerID string) (ty
|
||||||
return types.ContainerJSON{}, nil
|
return types.ContainerJSON{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *fakeClient) ContainerExecCreate(_ context.Context, containerID string, config types.ExecConfig) (types.IDResponse, error) {
|
func (f *fakeClient) ContainerExecCreate(_ context.Context, containerID string, config container.ExecOptions) (types.IDResponse, error) {
|
||||||
if f.execCreateFunc != nil {
|
if f.execCreateFunc != nil {
|
||||||
return f.execCreateFunc(containerID, config)
|
return f.execCreateFunc(containerID, config)
|
||||||
}
|
}
|
||||||
return types.IDResponse{}, nil
|
return types.IDResponse{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *fakeClient) ContainerExecInspect(_ context.Context, execID string) (types.ContainerExecInspect, error) {
|
func (f *fakeClient) ContainerExecInspect(_ context.Context, execID string) (container.ExecInspect, error) {
|
||||||
if f.execInspectFunc != nil {
|
if f.execInspectFunc != nil {
|
||||||
return f.execInspectFunc(execID)
|
return f.execInspectFunc(execID)
|
||||||
}
|
}
|
||||||
return types.ContainerExecInspect{}, nil
|
return container.ExecInspect{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *fakeClient) ContainerExecStart(context.Context, string, types.ExecStartCheck) error {
|
func (f *fakeClient) ContainerExecStart(context.Context, string, container.ExecStartOptions) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -108,18 +108,18 @@ func (f *fakeClient) Info(_ context.Context) (system.Info, error) {
|
||||||
return system.Info{}, nil
|
return system.Info{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *fakeClient) ContainerStatPath(_ context.Context, containerID, path string) (types.ContainerPathStat, error) {
|
func (f *fakeClient) ContainerStatPath(_ context.Context, containerID, path string) (container.PathStat, error) {
|
||||||
if f.containerStatPathFunc != nil {
|
if f.containerStatPathFunc != nil {
|
||||||
return f.containerStatPathFunc(containerID, path)
|
return f.containerStatPathFunc(containerID, path)
|
||||||
}
|
}
|
||||||
return types.ContainerPathStat{}, nil
|
return container.PathStat{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *fakeClient) CopyFromContainer(_ context.Context, containerID, srcPath string) (io.ReadCloser, types.ContainerPathStat, error) {
|
func (f *fakeClient) CopyFromContainer(_ context.Context, containerID, srcPath string) (io.ReadCloser, container.PathStat, error) {
|
||||||
if f.containerCopyFromFunc != nil {
|
if f.containerCopyFromFunc != nil {
|
||||||
return f.containerCopyFromFunc(containerID, srcPath)
|
return f.containerCopyFromFunc(containerID, srcPath)
|
||||||
}
|
}
|
||||||
return nil, types.ContainerPathStat{}, nil
|
return nil, container.PathStat{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *fakeClient) ContainerLogs(_ context.Context, containerID string, options container.LogsOptions) (io.ReadCloser, error) {
|
func (f *fakeClient) ContainerLogs(_ context.Context, containerID string, options container.LogsOptions) (io.ReadCloser, error) {
|
||||||
|
@ -168,11 +168,11 @@ func (f *fakeClient) ContainerKill(ctx context.Context, containerID, signal stri
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *fakeClient) ContainersPrune(ctx context.Context, pruneFilters filters.Args) (types.ContainersPruneReport, error) {
|
func (f *fakeClient) ContainersPrune(ctx context.Context, pruneFilters filters.Args) (container.PruneReport, error) {
|
||||||
if f.containerPruneFunc != nil {
|
if f.containerPruneFunc != nil {
|
||||||
return f.containerPruneFunc(ctx, pruneFilters)
|
return f.containerPruneFunc(ctx, pruneFilters)
|
||||||
}
|
}
|
||||||
return types.ContainersPruneReport{}, nil
|
return container.PruneReport{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *fakeClient) ContainerAttach(ctx context.Context, containerID string, options container.AttachOptions) (types.HijackedResponse, error) {
|
func (f *fakeClient) ContainerAttach(ctx context.Context, containerID string, options container.AttachOptions) (types.HijackedResponse, error) {
|
||||||
|
|
|
@ -15,7 +15,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/streams"
|
"github.com/docker/cli/cli/streams"
|
||||||
"github.com/docker/docker/api/types"
|
"github.com/docker/docker/api/types/container"
|
||||||
"github.com/docker/docker/pkg/archive"
|
"github.com/docker/docker/pkg/archive"
|
||||||
"github.com/docker/docker/pkg/system"
|
"github.com/docker/docker/pkg/system"
|
||||||
units "github.com/docker/go-units"
|
units "github.com/docker/go-units"
|
||||||
|
@ -397,7 +397,7 @@ func copyToContainer(ctx context.Context, dockerCli command.Cli, copyConfig cpCo
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
options := types.CopyToContainerOptions{
|
options := container.CopyToContainerOptions{
|
||||||
AllowOverwriteDirWithFile: false,
|
AllowOverwriteDirWithFile: false,
|
||||||
CopyUIDGID: copyConfig.copyUIDGID,
|
CopyUIDGID: copyConfig.copyUIDGID,
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,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/docker/pkg/archive"
|
"github.com/docker/docker/pkg/archive"
|
||||||
"gotest.tools/v3/assert"
|
"gotest.tools/v3/assert"
|
||||||
is "gotest.tools/v3/assert/cmp"
|
is "gotest.tools/v3/assert/cmp"
|
||||||
|
@ -52,9 +52,9 @@ func TestRunCopyFromContainerToStdout(t *testing.T) {
|
||||||
tarContent := "the tar content"
|
tarContent := "the tar content"
|
||||||
|
|
||||||
cli := test.NewFakeCli(&fakeClient{
|
cli := test.NewFakeCli(&fakeClient{
|
||||||
containerCopyFromFunc: func(ctr, srcPath string) (io.ReadCloser, types.ContainerPathStat, error) {
|
containerCopyFromFunc: func(ctr, srcPath string) (io.ReadCloser, container.PathStat, error) {
|
||||||
assert.Check(t, is.Equal("container", ctr))
|
assert.Check(t, is.Equal("container", ctr))
|
||||||
return io.NopCloser(strings.NewReader(tarContent)), types.ContainerPathStat{}, nil
|
return io.NopCloser(strings.NewReader(tarContent)), container.PathStat{}, nil
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
err := runCopy(context.TODO(), cli, copyOptions{
|
err := runCopy(context.TODO(), cli, copyOptions{
|
||||||
|
@ -72,10 +72,10 @@ func TestRunCopyFromContainerToFilesystem(t *testing.T) {
|
||||||
defer destDir.Remove()
|
defer destDir.Remove()
|
||||||
|
|
||||||
cli := test.NewFakeCli(&fakeClient{
|
cli := test.NewFakeCli(&fakeClient{
|
||||||
containerCopyFromFunc: func(ctr, srcPath string) (io.ReadCloser, types.ContainerPathStat, error) {
|
containerCopyFromFunc: func(ctr, srcPath string) (io.ReadCloser, container.PathStat, error) {
|
||||||
assert.Check(t, is.Equal("container", ctr))
|
assert.Check(t, is.Equal("container", ctr))
|
||||||
readCloser, err := archive.TarWithOptions(destDir.Path(), &archive.TarOptions{})
|
readCloser, err := archive.TarWithOptions(destDir.Path(), &archive.TarOptions{})
|
||||||
return readCloser, types.ContainerPathStat{}, err
|
return readCloser, container.PathStat{}, err
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
err := runCopy(context.TODO(), cli, copyOptions{
|
err := runCopy(context.TODO(), cli, copyOptions{
|
||||||
|
@ -98,10 +98,10 @@ func TestRunCopyFromContainerToFilesystemMissingDestinationDirectory(t *testing.
|
||||||
defer destDir.Remove()
|
defer destDir.Remove()
|
||||||
|
|
||||||
cli := test.NewFakeCli(&fakeClient{
|
cli := test.NewFakeCli(&fakeClient{
|
||||||
containerCopyFromFunc: func(ctr, srcPath string) (io.ReadCloser, types.ContainerPathStat, error) {
|
containerCopyFromFunc: func(ctr, srcPath string) (io.ReadCloser, container.PathStat, error) {
|
||||||
assert.Check(t, is.Equal("container", ctr))
|
assert.Check(t, is.Equal("container", ctr))
|
||||||
readCloser, err := archive.TarWithOptions(destDir.Path(), &archive.TarOptions{})
|
readCloser, err := archive.TarWithOptions(destDir.Path(), &archive.TarOptions{})
|
||||||
return readCloser, types.ContainerPathStat{}, err
|
return readCloser, container.PathStat{}, err
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
err := runCopy(context.TODO(), cli, copyOptions{
|
err := runCopy(context.TODO(), cli, copyOptions{
|
||||||
|
|
|
@ -12,6 +12,7 @@ import (
|
||||||
"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"
|
||||||
|
"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"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
|
@ -123,7 +124,7 @@ func RunExec(ctx context.Context, dockerCli command.Cli, containerIDorName strin
|
||||||
}
|
}
|
||||||
|
|
||||||
if execOptions.Detach {
|
if execOptions.Detach {
|
||||||
return apiClient.ContainerExecStart(ctx, execID, types.ExecStartCheck{
|
return apiClient.ContainerExecStart(ctx, execID, container.ExecStartOptions{
|
||||||
Detach: execOptions.Detach,
|
Detach: execOptions.Detach,
|
||||||
Tty: execOptions.Tty,
|
Tty: execOptions.Tty,
|
||||||
ConsoleSize: execOptions.ConsoleSize,
|
ConsoleSize: execOptions.ConsoleSize,
|
||||||
|
@ -132,14 +133,14 @@ func RunExec(ctx context.Context, dockerCli command.Cli, containerIDorName strin
|
||||||
return interactiveExec(ctx, dockerCli, execOptions, execID)
|
return interactiveExec(ctx, dockerCli, execOptions, execID)
|
||||||
}
|
}
|
||||||
|
|
||||||
func fillConsoleSize(execConfig *types.ExecConfig, dockerCli command.Cli) {
|
func fillConsoleSize(execOptions *container.ExecOptions, dockerCli command.Cli) {
|
||||||
if execConfig.Tty {
|
if execOptions.Tty {
|
||||||
height, width := dockerCli.Out().GetTtySize()
|
height, width := dockerCli.Out().GetTtySize()
|
||||||
execConfig.ConsoleSize = &[2]uint{height, width}
|
execOptions.ConsoleSize = &[2]uint{height, width}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func interactiveExec(ctx context.Context, dockerCli command.Cli, execOptions *types.ExecConfig, execID string) error {
|
func interactiveExec(ctx context.Context, dockerCli command.Cli, execOptions *container.ExecOptions, execID string) error {
|
||||||
// Interactive exec requested.
|
// Interactive exec requested.
|
||||||
var (
|
var (
|
||||||
out, stderr io.Writer
|
out, stderr io.Writer
|
||||||
|
@ -162,7 +163,7 @@ func interactiveExec(ctx context.Context, dockerCli command.Cli, execOptions *ty
|
||||||
fillConsoleSize(execOptions, dockerCli)
|
fillConsoleSize(execOptions, dockerCli)
|
||||||
|
|
||||||
apiClient := dockerCli.Client()
|
apiClient := dockerCli.Client()
|
||||||
resp, err := apiClient.ContainerExecAttach(ctx, execID, types.ExecStartCheck{
|
resp, err := apiClient.ContainerExecAttach(ctx, execID, container.ExecAttachOptions{
|
||||||
Tty: execOptions.Tty,
|
Tty: execOptions.Tty,
|
||||||
ConsoleSize: execOptions.ConsoleSize,
|
ConsoleSize: execOptions.ConsoleSize,
|
||||||
})
|
})
|
||||||
|
@ -222,8 +223,8 @@ func getExecExitStatus(ctx context.Context, apiClient client.ContainerAPIClient,
|
||||||
|
|
||||||
// parseExec parses the specified args for the specified command and generates
|
// parseExec parses the specified args for the specified command and generates
|
||||||
// an ExecConfig from it.
|
// an ExecConfig from it.
|
||||||
func parseExec(execOpts ExecOptions, configFile *configfile.ConfigFile) (*types.ExecConfig, error) {
|
func parseExec(execOpts ExecOptions, configFile *configfile.ConfigFile) (*container.ExecOptions, error) {
|
||||||
execOptions := &types.ExecConfig{
|
execOptions := &container.ExecOptions{
|
||||||
User: execOpts.User,
|
User: execOpts.User,
|
||||||
Privileged: execOpts.Privileged,
|
Privileged: execOpts.Privileged,
|
||||||
Tty: execOpts.TTY,
|
Tty: execOpts.TTY,
|
||||||
|
|
|
@ -11,6 +11,7 @@ import (
|
||||||
"github.com/docker/cli/internal/test"
|
"github.com/docker/cli/internal/test"
|
||||||
"github.com/docker/cli/opts"
|
"github.com/docker/cli/opts"
|
||||||
"github.com/docker/docker/api/types"
|
"github.com/docker/docker/api/types"
|
||||||
|
"github.com/docker/docker/api/types/container"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"gotest.tools/v3/assert"
|
"gotest.tools/v3/assert"
|
||||||
is "gotest.tools/v3/assert/cmp"
|
is "gotest.tools/v3/assert/cmp"
|
||||||
|
@ -37,10 +38,10 @@ TWO=2
|
||||||
testcases := []struct {
|
testcases := []struct {
|
||||||
options ExecOptions
|
options ExecOptions
|
||||||
configFile configfile.ConfigFile
|
configFile configfile.ConfigFile
|
||||||
expected types.ExecConfig
|
expected container.ExecOptions
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
expected: types.ExecConfig{
|
expected: container.ExecOptions{
|
||||||
Cmd: []string{"command"},
|
Cmd: []string{"command"},
|
||||||
AttachStdout: true,
|
AttachStdout: true,
|
||||||
AttachStderr: true,
|
AttachStderr: true,
|
||||||
|
@ -48,7 +49,7 @@ TWO=2
|
||||||
options: withDefaultOpts(ExecOptions{}),
|
options: withDefaultOpts(ExecOptions{}),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
expected: types.ExecConfig{
|
expected: container.ExecOptions{
|
||||||
Cmd: []string{"command1", "command2"},
|
Cmd: []string{"command1", "command2"},
|
||||||
AttachStdout: true,
|
AttachStdout: true,
|
||||||
AttachStderr: true,
|
AttachStderr: true,
|
||||||
|
@ -63,7 +64,7 @@ TWO=2
|
||||||
TTY: true,
|
TTY: true,
|
||||||
User: "uid",
|
User: "uid",
|
||||||
}),
|
}),
|
||||||
expected: types.ExecConfig{
|
expected: container.ExecOptions{
|
||||||
User: "uid",
|
User: "uid",
|
||||||
AttachStdin: true,
|
AttachStdin: true,
|
||||||
AttachStdout: true,
|
AttachStdout: true,
|
||||||
|
@ -74,7 +75,7 @@ TWO=2
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
options: withDefaultOpts(ExecOptions{Detach: true}),
|
options: withDefaultOpts(ExecOptions{Detach: true}),
|
||||||
expected: types.ExecConfig{
|
expected: container.ExecOptions{
|
||||||
Detach: true,
|
Detach: true,
|
||||||
Cmd: []string{"command"},
|
Cmd: []string{"command"},
|
||||||
},
|
},
|
||||||
|
@ -85,7 +86,7 @@ TWO=2
|
||||||
Interactive: true,
|
Interactive: true,
|
||||||
Detach: true,
|
Detach: true,
|
||||||
}),
|
}),
|
||||||
expected: types.ExecConfig{
|
expected: container.ExecOptions{
|
||||||
Detach: true,
|
Detach: true,
|
||||||
Tty: true,
|
Tty: true,
|
||||||
Cmd: []string{"command"},
|
Cmd: []string{"command"},
|
||||||
|
@ -94,7 +95,7 @@ TWO=2
|
||||||
{
|
{
|
||||||
options: withDefaultOpts(ExecOptions{Detach: true}),
|
options: withDefaultOpts(ExecOptions{Detach: true}),
|
||||||
configFile: configfile.ConfigFile{DetachKeys: "de"},
|
configFile: configfile.ConfigFile{DetachKeys: "de"},
|
||||||
expected: types.ExecConfig{
|
expected: container.ExecOptions{
|
||||||
Cmd: []string{"command"},
|
Cmd: []string{"command"},
|
||||||
DetachKeys: "de",
|
DetachKeys: "de",
|
||||||
Detach: true,
|
Detach: true,
|
||||||
|
@ -106,14 +107,14 @@ TWO=2
|
||||||
DetachKeys: "ab",
|
DetachKeys: "ab",
|
||||||
}),
|
}),
|
||||||
configFile: configfile.ConfigFile{DetachKeys: "de"},
|
configFile: configfile.ConfigFile{DetachKeys: "de"},
|
||||||
expected: types.ExecConfig{
|
expected: container.ExecOptions{
|
||||||
Cmd: []string{"command"},
|
Cmd: []string{"command"},
|
||||||
DetachKeys: "ab",
|
DetachKeys: "ab",
|
||||||
Detach: true,
|
Detach: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
expected: types.ExecConfig{
|
expected: container.ExecOptions{
|
||||||
Cmd: []string{"command"},
|
Cmd: []string{"command"},
|
||||||
AttachStdout: true,
|
AttachStdout: true,
|
||||||
AttachStderr: true,
|
AttachStderr: true,
|
||||||
|
@ -126,7 +127,7 @@ TWO=2
|
||||||
}(),
|
}(),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
expected: types.ExecConfig{
|
expected: container.ExecOptions{
|
||||||
Cmd: []string{"command"},
|
Cmd: []string{"command"},
|
||||||
AttachStdout: true,
|
AttachStdout: true,
|
||||||
AttachStderr: true,
|
AttachStderr: true,
|
||||||
|
@ -206,7 +207,7 @@ func TestRunExec(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func execCreateWithID(_ string, _ types.ExecConfig) (types.IDResponse, error) {
|
func execCreateWithID(_ string, _ container.ExecOptions) (types.IDResponse, error) {
|
||||||
return types.IDResponse{ID: "execid"}, nil
|
return types.IDResponse{ID: "execid"}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -235,9 +236,9 @@ func TestGetExecExitStatus(t *testing.T) {
|
||||||
|
|
||||||
for _, testcase := range testcases {
|
for _, testcase := range testcases {
|
||||||
client := &fakeClient{
|
client := &fakeClient{
|
||||||
execInspectFunc: func(id string) (types.ContainerExecInspect, error) {
|
execInspectFunc: func(id string) (container.ExecInspect, error) {
|
||||||
assert.Check(t, is.Equal(execID, id))
|
assert.Check(t, is.Equal(execID, id))
|
||||||
return types.ContainerExecInspect{ExitCode: testcase.exitCode}, testcase.inspectError
|
return container.ExecInspect{ExitCode: testcase.exitCode}, testcase.inspectError
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
err := getExecExitStatus(context.Background(), client, execID)
|
err := getExecExitStatus(context.Background(), client, execID)
|
||||||
|
|
|
@ -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/docker/api/types/filters"
|
"github.com/docker/docker/api/types/filters"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
)
|
)
|
||||||
|
@ -15,8 +15,8 @@ func TestContainerPrunePromptTermination(t *testing.T) {
|
||||||
t.Cleanup(cancel)
|
t.Cleanup(cancel)
|
||||||
|
|
||||||
cli := test.NewFakeCli(&fakeClient{
|
cli := test.NewFakeCli(&fakeClient{
|
||||||
containerPruneFunc: func(ctx context.Context, pruneFilters filters.Args) (types.ContainersPruneReport, error) {
|
containerPruneFunc: func(ctx context.Context, pruneFilters filters.Args) (container.PruneReport, error) {
|
||||||
return types.ContainersPruneReport{}, errors.New("fakeClient containerPruneFunc should not be called")
|
return container.PruneReport{}, errors.New("fakeClient containerPruneFunc should not be called")
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
cmd := NewPruneCommand(cli)
|
cmd := NewPruneCommand(cli)
|
||||||
|
|
|
@ -13,7 +13,6 @@ import (
|
||||||
"github.com/docker/cli/cli/command/completion"
|
"github.com/docker/cli/cli/command/completion"
|
||||||
"github.com/docker/cli/cli/command/formatter"
|
"github.com/docker/cli/cli/command/formatter"
|
||||||
flagsHelper "github.com/docker/cli/cli/flags"
|
flagsHelper "github.com/docker/cli/cli/flags"
|
||||||
"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/events"
|
"github.com/docker/docker/api/types/events"
|
||||||
"github.com/docker/docker/api/types/filters"
|
"github.com/docker/docker/api/types/filters"
|
||||||
|
@ -164,7 +163,7 @@ func RunStats(ctx context.Context, dockerCLI command.Cli, options *StatsOptions)
|
||||||
// is not valid for filtering containers.
|
// is not valid for filtering containers.
|
||||||
f := options.Filters.Clone()
|
f := options.Filters.Clone()
|
||||||
f.Add("type", string(events.ContainerEventType))
|
f.Add("type", string(events.ContainerEventType))
|
||||||
eventChan, errChan := apiClient.Events(ctx, types.EventsOptions{
|
eventChan, errChan := apiClient.Events(ctx, events.ListOptions{
|
||||||
Filters: f,
|
Filters: f,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,6 @@ import (
|
||||||
"errors"
|
"errors"
|
||||||
"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/events"
|
"github.com/docker/docker/api/types/events"
|
||||||
"github.com/docker/docker/api/types/filters"
|
"github.com/docker/docker/api/types/filters"
|
||||||
|
@ -70,7 +69,7 @@ func legacyWaitExitOrRemoved(ctx context.Context, apiClient client.APIClient, co
|
||||||
f.Add("container", containerID)
|
f.Add("container", containerID)
|
||||||
|
|
||||||
eventCtx, cancel := context.WithCancel(ctx)
|
eventCtx, cancel := context.WithCancel(ctx)
|
||||||
eventq, errq := apiClient.Events(eventCtx, types.EventsOptions{
|
eventq, errq := apiClient.Events(eventCtx, events.ListOptions{
|
||||||
Filters: f,
|
Filters: f,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -21,11 +21,11 @@ type fakeClient struct {
|
||||||
imagePushFunc func(ref string, options image.PushOptions) (io.ReadCloser, error)
|
imagePushFunc func(ref string, options image.PushOptions) (io.ReadCloser, error)
|
||||||
infoFunc func() (system.Info, error)
|
infoFunc func() (system.Info, error)
|
||||||
imagePullFunc func(ref string, options image.PullOptions) (io.ReadCloser, error)
|
imagePullFunc func(ref string, options image.PullOptions) (io.ReadCloser, error)
|
||||||
imagesPruneFunc func(pruneFilter filters.Args) (types.ImagesPruneReport, error)
|
imagesPruneFunc func(pruneFilter filters.Args) (image.PruneReport, error)
|
||||||
imageLoadFunc func(input io.Reader, quiet bool) (types.ImageLoadResponse, 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(image string) (types.ImageInspect, []byte, error)
|
imageInspectFunc func(image string) (types.ImageInspect, []byte, error)
|
||||||
imageImportFunc func(source types.ImageImportSource, ref string, options image.ImportOptions) (io.ReadCloser, error)
|
imageImportFunc func(source image.ImportSource, ref string, options image.ImportOptions) (io.ReadCloser, error)
|
||||||
imageHistoryFunc func(image string) ([]image.HistoryResponseItem, error)
|
imageHistoryFunc func(image 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)
|
||||||
}
|
}
|
||||||
|
@ -74,18 +74,18 @@ func (cli *fakeClient) ImagePull(_ context.Context, ref string, options image.Pu
|
||||||
return io.NopCloser(strings.NewReader("")), nil
|
return io.NopCloser(strings.NewReader("")), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cli *fakeClient) ImagesPrune(_ context.Context, pruneFilter filters.Args) (types.ImagesPruneReport, error) {
|
func (cli *fakeClient) ImagesPrune(_ context.Context, pruneFilter filters.Args) (image.PruneReport, error) {
|
||||||
if cli.imagesPruneFunc != nil {
|
if cli.imagesPruneFunc != nil {
|
||||||
return cli.imagesPruneFunc(pruneFilter)
|
return cli.imagesPruneFunc(pruneFilter)
|
||||||
}
|
}
|
||||||
return types.ImagesPruneReport{}, nil
|
return image.PruneReport{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cli *fakeClient) ImageLoad(_ context.Context, input io.Reader, quiet bool) (types.ImageLoadResponse, error) {
|
func (cli *fakeClient) ImageLoad(_ context.Context, input io.Reader, quiet bool) (image.LoadResponse, error) {
|
||||||
if cli.imageLoadFunc != nil {
|
if cli.imageLoadFunc != nil {
|
||||||
return cli.imageLoadFunc(input, quiet)
|
return cli.imageLoadFunc(input, quiet)
|
||||||
}
|
}
|
||||||
return types.ImageLoadResponse{}, nil
|
return image.LoadResponse{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cli *fakeClient) ImageList(_ context.Context, options image.ListOptions) ([]image.Summary, error) {
|
func (cli *fakeClient) ImageList(_ context.Context, options image.ListOptions) ([]image.Summary, error) {
|
||||||
|
@ -102,7 +102,7 @@ func (cli *fakeClient) ImageInspectWithRaw(_ context.Context, img string) (types
|
||||||
return types.ImageInspect{}, nil, nil
|
return types.ImageInspect{}, nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cli *fakeClient) ImageImport(_ context.Context, source types.ImageImportSource, ref string,
|
func (cli *fakeClient) ImageImport(_ context.Context, source image.ImportSource, ref string,
|
||||||
options image.ImportOptions,
|
options image.ImportOptions,
|
||||||
) (io.ReadCloser, error) {
|
) (io.ReadCloser, error) {
|
||||||
if cli.imageImportFunc != nil {
|
if cli.imageImportFunc != nil {
|
||||||
|
|
|
@ -8,7 +8,6 @@ import (
|
||||||
"github.com/docker/cli/cli"
|
"github.com/docker/cli/cli"
|
||||||
"github.com/docker/cli/cli/command"
|
"github.com/docker/cli/cli/command"
|
||||||
dockeropts "github.com/docker/cli/opts"
|
dockeropts "github.com/docker/cli/opts"
|
||||||
"github.com/docker/docker/api/types"
|
|
||||||
"github.com/docker/docker/api/types/image"
|
"github.com/docker/docker/api/types/image"
|
||||||
"github.com/docker/docker/pkg/jsonmessage"
|
"github.com/docker/docker/pkg/jsonmessage"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
@ -53,17 +52,17 @@ func NewImportCommand(dockerCli command.Cli) *cobra.Command {
|
||||||
}
|
}
|
||||||
|
|
||||||
func runImport(ctx context.Context, dockerCli command.Cli, options importOptions) error {
|
func runImport(ctx context.Context, dockerCli command.Cli, options importOptions) error {
|
||||||
var source types.ImageImportSource
|
var source image.ImportSource
|
||||||
switch {
|
switch {
|
||||||
case options.source == "-":
|
case options.source == "-":
|
||||||
// import from STDIN
|
// import from STDIN
|
||||||
source = types.ImageImportSource{
|
source = image.ImportSource{
|
||||||
Source: dockerCli.In(),
|
Source: dockerCli.In(),
|
||||||
SourceName: options.source,
|
SourceName: options.source,
|
||||||
}
|
}
|
||||||
case strings.HasPrefix(options.source, "https://"), strings.HasPrefix(options.source, "http://"):
|
case strings.HasPrefix(options.source, "https://"), strings.HasPrefix(options.source, "http://"):
|
||||||
// import from a remote source (handled by the daemon)
|
// import from a remote source (handled by the daemon)
|
||||||
source = types.ImageImportSource{
|
source = image.ImportSource{
|
||||||
SourceName: options.source,
|
SourceName: options.source,
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
@ -73,7 +72,7 @@ func runImport(ctx context.Context, dockerCli command.Cli, options importOptions
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
defer file.Close()
|
defer file.Close()
|
||||||
source = types.ImageImportSource{
|
source = image.ImportSource{
|
||||||
Source: file,
|
Source: file,
|
||||||
SourceName: "-",
|
SourceName: "-",
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,7 +6,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/image"
|
"github.com/docker/docker/api/types/image"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"gotest.tools/v3/assert"
|
"gotest.tools/v3/assert"
|
||||||
|
@ -18,7 +17,7 @@ func TestNewImportCommandErrors(t *testing.T) {
|
||||||
name string
|
name string
|
||||||
args []string
|
args []string
|
||||||
expectedError string
|
expectedError string
|
||||||
imageImportFunc func(source types.ImageImportSource, ref string, options image.ImportOptions) (io.ReadCloser, error)
|
imageImportFunc func(source image.ImportSource, ref string, options image.ImportOptions) (io.ReadCloser, error)
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "wrong-args",
|
name: "wrong-args",
|
||||||
|
@ -29,7 +28,7 @@ func TestNewImportCommandErrors(t *testing.T) {
|
||||||
name: "import-failed",
|
name: "import-failed",
|
||||||
args: []string{"testdata/import-command-success.input.txt"},
|
args: []string{"testdata/import-command-success.input.txt"},
|
||||||
expectedError: "something went wrong",
|
expectedError: "something went wrong",
|
||||||
imageImportFunc: func(source types.ImageImportSource, ref string, options image.ImportOptions) (io.ReadCloser, error) {
|
imageImportFunc: func(source image.ImportSource, ref string, options image.ImportOptions) (io.ReadCloser, error) {
|
||||||
return nil, errors.Errorf("something went wrong")
|
return nil, errors.Errorf("something went wrong")
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -53,7 +52,7 @@ func TestNewImportCommandSuccess(t *testing.T) {
|
||||||
testCases := []struct {
|
testCases := []struct {
|
||||||
name string
|
name string
|
||||||
args []string
|
args []string
|
||||||
imageImportFunc func(source types.ImageImportSource, ref string, options image.ImportOptions) (io.ReadCloser, error)
|
imageImportFunc func(source image.ImportSource, ref string, options image.ImportOptions) (io.ReadCloser, error)
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "simple",
|
name: "simple",
|
||||||
|
@ -66,7 +65,7 @@ func TestNewImportCommandSuccess(t *testing.T) {
|
||||||
{
|
{
|
||||||
name: "double",
|
name: "double",
|
||||||
args: []string{"-", "image:local"},
|
args: []string{"-", "image:local"},
|
||||||
imageImportFunc: func(source types.ImageImportSource, ref string, options image.ImportOptions) (io.ReadCloser, error) {
|
imageImportFunc: func(source image.ImportSource, ref string, options image.ImportOptions) (io.ReadCloser, error) {
|
||||||
assert.Check(t, is.Equal("image:local", ref))
|
assert.Check(t, is.Equal("image:local", ref))
|
||||||
return io.NopCloser(strings.NewReader("")), nil
|
return io.NopCloser(strings.NewReader("")), nil
|
||||||
},
|
},
|
||||||
|
@ -74,7 +73,7 @@ func TestNewImportCommandSuccess(t *testing.T) {
|
||||||
{
|
{
|
||||||
name: "message",
|
name: "message",
|
||||||
args: []string{"--message", "test message", "-"},
|
args: []string{"--message", "test message", "-"},
|
||||||
imageImportFunc: func(source types.ImageImportSource, ref string, options image.ImportOptions) (io.ReadCloser, error) {
|
imageImportFunc: func(source image.ImportSource, ref string, options image.ImportOptions) (io.ReadCloser, error) {
|
||||||
assert.Check(t, is.Equal("test message", options.Message))
|
assert.Check(t, is.Equal("test message", options.Message))
|
||||||
return io.NopCloser(strings.NewReader("")), nil
|
return io.NopCloser(strings.NewReader("")), nil
|
||||||
},
|
},
|
||||||
|
@ -82,7 +81,7 @@ func TestNewImportCommandSuccess(t *testing.T) {
|
||||||
{
|
{
|
||||||
name: "change",
|
name: "change",
|
||||||
args: []string{"--change", "ENV DEBUG=true", "-"},
|
args: []string{"--change", "ENV DEBUG=true", "-"},
|
||||||
imageImportFunc: func(source types.ImageImportSource, ref string, options image.ImportOptions) (io.ReadCloser, error) {
|
imageImportFunc: func(source image.ImportSource, ref string, options image.ImportOptions) (io.ReadCloser, error) {
|
||||||
assert.Check(t, is.Equal("ENV DEBUG=true", options.Changes[0]))
|
assert.Check(t, is.Equal("ENV DEBUG=true", options.Changes[0]))
|
||||||
return io.NopCloser(strings.NewReader("")), nil
|
return io.NopCloser(strings.NewReader("")), nil
|
||||||
},
|
},
|
||||||
|
@ -90,7 +89,7 @@ func TestNewImportCommandSuccess(t *testing.T) {
|
||||||
{
|
{
|
||||||
name: "change legacy syntax",
|
name: "change legacy syntax",
|
||||||
args: []string{"--change", "ENV DEBUG true", "-"},
|
args: []string{"--change", "ENV DEBUG true", "-"},
|
||||||
imageImportFunc: func(source types.ImageImportSource, ref string, options image.ImportOptions) (io.ReadCloser, error) {
|
imageImportFunc: func(source image.ImportSource, ref string, options image.ImportOptions) (io.ReadCloser, error) {
|
||||||
assert.Check(t, is.Equal("ENV DEBUG true", options.Changes[0]))
|
assert.Check(t, is.Equal("ENV DEBUG true", options.Changes[0]))
|
||||||
return io.NopCloser(strings.NewReader("")), nil
|
return io.NopCloser(strings.NewReader("")), nil
|
||||||
},
|
},
|
||||||
|
|
|
@ -7,7 +7,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"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"gotest.tools/v3/assert"
|
"gotest.tools/v3/assert"
|
||||||
"gotest.tools/v3/golden"
|
"gotest.tools/v3/golden"
|
||||||
|
@ -19,7 +19,7 @@ func TestNewLoadCommandErrors(t *testing.T) {
|
||||||
args []string
|
args []string
|
||||||
isTerminalIn bool
|
isTerminalIn bool
|
||||||
expectedError string
|
expectedError string
|
||||||
imageLoadFunc func(input io.Reader, quiet bool) (types.ImageLoadResponse, error)
|
imageLoadFunc func(input io.Reader, quiet bool) (image.LoadResponse, error)
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "wrong-args",
|
name: "wrong-args",
|
||||||
|
@ -34,8 +34,8 @@ func TestNewLoadCommandErrors(t *testing.T) {
|
||||||
{
|
{
|
||||||
name: "pull-error",
|
name: "pull-error",
|
||||||
expectedError: "something went wrong",
|
expectedError: "something went wrong",
|
||||||
imageLoadFunc: func(input io.Reader, quiet bool) (types.ImageLoadResponse, error) {
|
imageLoadFunc: func(input io.Reader, quiet bool) (image.LoadResponse, error) {
|
||||||
return types.ImageLoadResponse{}, errors.Errorf("something went wrong")
|
return image.LoadResponse{}, errors.Errorf("something went wrong")
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@ -62,19 +62,19 @@ func TestNewLoadCommandSuccess(t *testing.T) {
|
||||||
testCases := []struct {
|
testCases := []struct {
|
||||||
name string
|
name string
|
||||||
args []string
|
args []string
|
||||||
imageLoadFunc func(input io.Reader, quiet bool) (types.ImageLoadResponse, error)
|
imageLoadFunc func(input io.Reader, quiet bool) (image.LoadResponse, error)
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "simple",
|
name: "simple",
|
||||||
imageLoadFunc: func(input io.Reader, quiet bool) (types.ImageLoadResponse, error) {
|
imageLoadFunc: func(input io.Reader, quiet bool) (image.LoadResponse, error) {
|
||||||
return types.ImageLoadResponse{Body: io.NopCloser(strings.NewReader("Success"))}, nil
|
return image.LoadResponse{Body: io.NopCloser(strings.NewReader("Success"))}, nil
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "json",
|
name: "json",
|
||||||
imageLoadFunc: func(input io.Reader, quiet bool) (types.ImageLoadResponse, error) {
|
imageLoadFunc: func(input io.Reader, quiet bool) (image.LoadResponse, error) {
|
||||||
json := "{\"ID\": \"1\"}"
|
json := "{\"ID\": \"1\"}"
|
||||||
return types.ImageLoadResponse{
|
return image.LoadResponse{
|
||||||
Body: io.NopCloser(strings.NewReader(json)),
|
Body: io.NopCloser(strings.NewReader(json)),
|
||||||
JSON: true,
|
JSON: true,
|
||||||
}, nil
|
}, nil
|
||||||
|
@ -83,8 +83,8 @@ func TestNewLoadCommandSuccess(t *testing.T) {
|
||||||
{
|
{
|
||||||
name: "input-file",
|
name: "input-file",
|
||||||
args: []string{"--input", "testdata/load-command-success.input.txt"},
|
args: []string{"--input", "testdata/load-command-success.input.txt"},
|
||||||
imageLoadFunc: func(input io.Reader, quiet bool) (types.ImageLoadResponse, error) {
|
imageLoadFunc: func(input io.Reader, quiet bool) (image.LoadResponse, error) {
|
||||||
return types.ImageLoadResponse{Body: io.NopCloser(strings.NewReader("Success"))}, nil
|
return image.LoadResponse{Body: io.NopCloser(strings.NewReader("Success"))}, nil
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,6 @@ import (
|
||||||
|
|
||||||
"github.com/docker/cli/cli/streams"
|
"github.com/docker/cli/cli/streams"
|
||||||
"github.com/docker/cli/internal/test"
|
"github.com/docker/cli/internal/test"
|
||||||
"github.com/docker/docker/api/types"
|
|
||||||
"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/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
|
@ -23,7 +22,7 @@ func TestNewPruneCommandErrors(t *testing.T) {
|
||||||
name string
|
name string
|
||||||
args []string
|
args []string
|
||||||
expectedError string
|
expectedError string
|
||||||
imagesPruneFunc func(pruneFilter filters.Args) (types.ImagesPruneReport, error)
|
imagesPruneFunc func(pruneFilter filters.Args) (image.PruneReport, error)
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "wrong-args",
|
name: "wrong-args",
|
||||||
|
@ -34,8 +33,8 @@ func TestNewPruneCommandErrors(t *testing.T) {
|
||||||
name: "prune-error",
|
name: "prune-error",
|
||||||
args: []string{"--force"},
|
args: []string{"--force"},
|
||||||
expectedError: "something went wrong",
|
expectedError: "something went wrong",
|
||||||
imagesPruneFunc: func(pruneFilter filters.Args) (types.ImagesPruneReport, error) {
|
imagesPruneFunc: func(pruneFilter filters.Args) (image.PruneReport, error) {
|
||||||
return types.ImagesPruneReport{}, errors.Errorf("something went wrong")
|
return image.PruneReport{}, errors.Errorf("something went wrong")
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@ -53,22 +52,22 @@ func TestNewPruneCommandSuccess(t *testing.T) {
|
||||||
testCases := []struct {
|
testCases := []struct {
|
||||||
name string
|
name string
|
||||||
args []string
|
args []string
|
||||||
imagesPruneFunc func(pruneFilter filters.Args) (types.ImagesPruneReport, error)
|
imagesPruneFunc func(pruneFilter filters.Args) (image.PruneReport, error)
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "all",
|
name: "all",
|
||||||
args: []string{"--all"},
|
args: []string{"--all"},
|
||||||
imagesPruneFunc: func(pruneFilter filters.Args) (types.ImagesPruneReport, error) {
|
imagesPruneFunc: func(pruneFilter filters.Args) (image.PruneReport, error) {
|
||||||
assert.Check(t, is.Equal("false", pruneFilter.Get("dangling")[0]))
|
assert.Check(t, is.Equal("false", pruneFilter.Get("dangling")[0]))
|
||||||
return types.ImagesPruneReport{}, nil
|
return image.PruneReport{}, nil
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "force-deleted",
|
name: "force-deleted",
|
||||||
args: []string{"--force"},
|
args: []string{"--force"},
|
||||||
imagesPruneFunc: func(pruneFilter filters.Args) (types.ImagesPruneReport, error) {
|
imagesPruneFunc: func(pruneFilter filters.Args) (image.PruneReport, error) {
|
||||||
assert.Check(t, is.Equal("true", pruneFilter.Get("dangling")[0]))
|
assert.Check(t, is.Equal("true", pruneFilter.Get("dangling")[0]))
|
||||||
return types.ImagesPruneReport{
|
return image.PruneReport{
|
||||||
ImagesDeleted: []image.DeleteResponse{{Deleted: "image1"}},
|
ImagesDeleted: []image.DeleteResponse{{Deleted: "image1"}},
|
||||||
SpaceReclaimed: 1,
|
SpaceReclaimed: 1,
|
||||||
}, nil
|
}, nil
|
||||||
|
@ -77,17 +76,17 @@ func TestNewPruneCommandSuccess(t *testing.T) {
|
||||||
{
|
{
|
||||||
name: "label-filter",
|
name: "label-filter",
|
||||||
args: []string{"--force", "--filter", "label=foobar"},
|
args: []string{"--force", "--filter", "label=foobar"},
|
||||||
imagesPruneFunc: func(pruneFilter filters.Args) (types.ImagesPruneReport, error) {
|
imagesPruneFunc: func(pruneFilter filters.Args) (image.PruneReport, error) {
|
||||||
assert.Check(t, is.Equal("foobar", pruneFilter.Get("label")[0]))
|
assert.Check(t, is.Equal("foobar", pruneFilter.Get("label")[0]))
|
||||||
return types.ImagesPruneReport{}, nil
|
return image.PruneReport{}, nil
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "force-untagged",
|
name: "force-untagged",
|
||||||
args: []string{"--force"},
|
args: []string{"--force"},
|
||||||
imagesPruneFunc: func(pruneFilter filters.Args) (types.ImagesPruneReport, error) {
|
imagesPruneFunc: func(pruneFilter filters.Args) (image.PruneReport, error) {
|
||||||
assert.Check(t, is.Equal("true", pruneFilter.Get("dangling")[0]))
|
assert.Check(t, is.Equal("true", pruneFilter.Get("dangling")[0]))
|
||||||
return types.ImagesPruneReport{
|
return image.PruneReport{
|
||||||
ImagesDeleted: []image.DeleteResponse{{Untagged: "image1"}},
|
ImagesDeleted: []image.DeleteResponse{{Untagged: "image1"}},
|
||||||
SpaceReclaimed: 2,
|
SpaceReclaimed: 2,
|
||||||
}, nil
|
}, nil
|
||||||
|
@ -115,8 +114,8 @@ func TestPrunePromptTermination(t *testing.T) {
|
||||||
t.Cleanup(cancel)
|
t.Cleanup(cancel)
|
||||||
|
|
||||||
cli := test.NewFakeCli(&fakeClient{
|
cli := test.NewFakeCli(&fakeClient{
|
||||||
imagesPruneFunc: func(pruneFilter filters.Args) (types.ImagesPruneReport, error) {
|
imagesPruneFunc: func(pruneFilter filters.Args) (image.PruneReport, error) {
|
||||||
return types.ImagesPruneReport{}, errors.New("fakeClient imagesPruneFunc should not be called")
|
return image.PruneReport{}, errors.New("fakeClient imagesPruneFunc should not be called")
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
cmd := NewPruneCommand(cli)
|
cmd := NewPruneCommand(cli)
|
||||||
|
|
|
@ -8,7 +8,6 @@ import (
|
||||||
"github.com/docker/cli/cli/command"
|
"github.com/docker/cli/cli/command"
|
||||||
"github.com/docker/cli/cli/command/formatter"
|
"github.com/docker/cli/cli/command/formatter"
|
||||||
"github.com/docker/cli/opts"
|
"github.com/docker/cli/opts"
|
||||||
"github.com/docker/docker/api/types"
|
|
||||||
registrytypes "github.com/docker/docker/api/types/registry"
|
registrytypes "github.com/docker/docker/api/types/registry"
|
||||||
"github.com/docker/docker/registry"
|
"github.com/docker/docker/registry"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
@ -65,7 +64,7 @@ func runSearch(ctx context.Context, dockerCli command.Cli, options searchOptions
|
||||||
}
|
}
|
||||||
|
|
||||||
requestPrivilege := command.RegistryAuthenticationPrivilegedFunc(dockerCli, indexInfo, "search")
|
requestPrivilege := command.RegistryAuthenticationPrivilegedFunc(dockerCli, indexInfo, "search")
|
||||||
results, err := dockerCli.Client().ImageSearch(ctx, options.term, types.ImageSearchOptions{
|
results, err := dockerCli.Client().ImageSearch(ctx, options.term, registrytypes.SearchOptions{
|
||||||
RegistryAuth: encodedAuth,
|
RegistryAuth: encodedAuth,
|
||||||
PrivilegeFunc: requestPrivilege,
|
PrivilegeFunc: requestPrivilege,
|
||||||
Filters: options.filter.Value(),
|
Filters: options.filter.Value(),
|
||||||
|
|
|
@ -4,6 +4,7 @@ import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"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/events"
|
"github.com/docker/docker/api/types/events"
|
||||||
"github.com/docker/docker/api/types/filters"
|
"github.com/docker/docker/api/types/filters"
|
||||||
"github.com/docker/docker/api/types/network"
|
"github.com/docker/docker/api/types/network"
|
||||||
|
@ -15,8 +16,8 @@ type fakeClient struct {
|
||||||
|
|
||||||
version string
|
version string
|
||||||
serverVersion func(ctx context.Context) (types.Version, error)
|
serverVersion func(ctx context.Context) (types.Version, error)
|
||||||
eventsFn func(context.Context, types.EventsOptions) (<-chan events.Message, <-chan error)
|
eventsFn func(context.Context, events.ListOptions) (<-chan events.Message, <-chan error)
|
||||||
containerPruneFunc func(ctx context.Context, pruneFilters filters.Args) (types.ContainersPruneReport, error)
|
containerPruneFunc func(ctx context.Context, pruneFilters filters.Args) (container.PruneReport, error)
|
||||||
networkPruneFunc func(ctx context.Context, pruneFilter filters.Args) (network.PruneReport, error)
|
networkPruneFunc func(ctx context.Context, pruneFilter filters.Args) (network.PruneReport, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,15 +29,15 @@ func (cli *fakeClient) ClientVersion() string {
|
||||||
return cli.version
|
return cli.version
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cli *fakeClient) Events(ctx context.Context, opts types.EventsOptions) (<-chan events.Message, <-chan error) {
|
func (cli *fakeClient) Events(ctx context.Context, opts events.ListOptions) (<-chan events.Message, <-chan error) {
|
||||||
return cli.eventsFn(ctx, opts)
|
return cli.eventsFn(ctx, opts)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cli *fakeClient) ContainersPrune(ctx context.Context, pruneFilters filters.Args) (types.ContainersPruneReport, error) {
|
func (cli *fakeClient) ContainersPrune(ctx context.Context, pruneFilters filters.Args) (container.PruneReport, error) {
|
||||||
if cli.containerPruneFunc != nil {
|
if cli.containerPruneFunc != nil {
|
||||||
return cli.containerPruneFunc(ctx, pruneFilters)
|
return cli.containerPruneFunc(ctx, pruneFilters)
|
||||||
}
|
}
|
||||||
return types.ContainersPruneReport{}, nil
|
return container.PruneReport{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cli *fakeClient) NetworksPrune(ctx context.Context, pruneFilter filters.Args) (network.PruneReport, error) {
|
func (cli *fakeClient) NetworksPrune(ctx context.Context, pruneFilter filters.Args) (network.PruneReport, error) {
|
||||||
|
|
|
@ -16,7 +16,6 @@ import (
|
||||||
flagsHelper "github.com/docker/cli/cli/flags"
|
flagsHelper "github.com/docker/cli/cli/flags"
|
||||||
"github.com/docker/cli/opts"
|
"github.com/docker/cli/opts"
|
||||||
"github.com/docker/cli/templates"
|
"github.com/docker/cli/templates"
|
||||||
"github.com/docker/docker/api/types"
|
|
||||||
"github.com/docker/docker/api/types/events"
|
"github.com/docker/docker/api/types/events"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
)
|
)
|
||||||
|
@ -63,7 +62,7 @@ func runEvents(ctx context.Context, dockerCli command.Cli, options *eventsOption
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ctx, cancel := context.WithCancel(ctx)
|
ctx, cancel := context.WithCancel(ctx)
|
||||||
evts, errs := dockerCli.Client().Events(ctx, types.EventsOptions{
|
evts, errs := dockerCli.Client().Events(ctx, events.ListOptions{
|
||||||
Since: options.since,
|
Since: options.since,
|
||||||
Until: options.until,
|
Until: options.until,
|
||||||
Filters: options.filter.Value(),
|
Filters: options.filter.Value(),
|
||||||
|
|
|
@ -9,7 +9,6 @@ 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/events"
|
"github.com/docker/docker/api/types/events"
|
||||||
"gotest.tools/v3/assert"
|
"gotest.tools/v3/assert"
|
||||||
"gotest.tools/v3/golden"
|
"gotest.tools/v3/golden"
|
||||||
|
@ -59,7 +58,7 @@ func TestEventsFormat(t *testing.T) {
|
||||||
// Set to UTC timezone as timestamps in output are
|
// Set to UTC timezone as timestamps in output are
|
||||||
// printed in the current timezone
|
// printed in the current timezone
|
||||||
t.Setenv("TZ", "UTC")
|
t.Setenv("TZ", "UTC")
|
||||||
cli := test.NewFakeCli(&fakeClient{eventsFn: func(context.Context, types.EventsOptions) (<-chan events.Message, <-chan error) {
|
cli := test.NewFakeCli(&fakeClient{eventsFn: func(context.Context, events.ListOptions) (<-chan events.Message, <-chan error) {
|
||||||
messages := make(chan events.Message)
|
messages := make(chan events.Message)
|
||||||
errs := make(chan error, 1)
|
errs := make(chan error, 1)
|
||||||
go func() {
|
go func() {
|
||||||
|
|
|
@ -6,7 +6,7 @@ import (
|
||||||
|
|
||||||
"github.com/docker/cli/cli/config/configfile"
|
"github.com/docker/cli/cli/config/configfile"
|
||||||
"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/filters"
|
"github.com/docker/docker/api/types/filters"
|
||||||
"github.com/docker/docker/api/types/network"
|
"github.com/docker/docker/api/types/network"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
|
@ -60,8 +60,8 @@ func TestSystemPrunePromptTermination(t *testing.T) {
|
||||||
t.Cleanup(cancel)
|
t.Cleanup(cancel)
|
||||||
|
|
||||||
cli := test.NewFakeCli(&fakeClient{
|
cli := test.NewFakeCli(&fakeClient{
|
||||||
containerPruneFunc: func(ctx context.Context, pruneFilters filters.Args) (types.ContainersPruneReport, error) {
|
containerPruneFunc: func(ctx context.Context, pruneFilters filters.Args) (container.PruneReport, error) {
|
||||||
return types.ContainersPruneReport{}, errors.New("fakeClient containerPruneFunc should not be called")
|
return container.PruneReport{}, errors.New("fakeClient containerPruneFunc should not be called")
|
||||||
},
|
},
|
||||||
networkPruneFunc: func(ctx context.Context, pruneFilters filters.Args) (network.PruneReport, error) {
|
networkPruneFunc: func(ctx context.Context, pruneFilters filters.Args) (network.PruneReport, error) {
|
||||||
return network.PruneReport{}, errors.New("fakeClient networkPruneFunc should not be called")
|
return network.PruneReport{}, errors.New("fakeClient networkPruneFunc should not be called")
|
||||||
|
|
|
@ -3,7 +3,6 @@ package volume
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"github.com/docker/docker/api/types"
|
|
||||||
"github.com/docker/docker/api/types/filters"
|
"github.com/docker/docker/api/types/filters"
|
||||||
"github.com/docker/docker/api/types/volume"
|
"github.com/docker/docker/api/types/volume"
|
||||||
"github.com/docker/docker/client"
|
"github.com/docker/docker/client"
|
||||||
|
@ -15,7 +14,7 @@ type fakeClient struct {
|
||||||
volumeInspectFunc func(volumeID string) (volume.Volume, error)
|
volumeInspectFunc func(volumeID string) (volume.Volume, error)
|
||||||
volumeListFunc func(filter filters.Args) (volume.ListResponse, error)
|
volumeListFunc func(filter filters.Args) (volume.ListResponse, error)
|
||||||
volumeRemoveFunc func(volumeID string, force bool) error
|
volumeRemoveFunc func(volumeID string, force bool) error
|
||||||
volumePruneFunc func(filter filters.Args) (types.VolumesPruneReport, error)
|
volumePruneFunc func(filter filters.Args) (volume.PruneReport, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *fakeClient) VolumeCreate(_ context.Context, options volume.CreateOptions) (volume.Volume, error) {
|
func (c *fakeClient) VolumeCreate(_ context.Context, options volume.CreateOptions) (volume.Volume, error) {
|
||||||
|
@ -39,11 +38,11 @@ func (c *fakeClient) VolumeList(_ context.Context, options volume.ListOptions) (
|
||||||
return volume.ListResponse{}, nil
|
return volume.ListResponse{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *fakeClient) VolumesPrune(_ context.Context, filter filters.Args) (types.VolumesPruneReport, error) {
|
func (c *fakeClient) VolumesPrune(_ context.Context, filter filters.Args) (volume.PruneReport, error) {
|
||||||
if c.volumePruneFunc != nil {
|
if c.volumePruneFunc != nil {
|
||||||
return c.volumePruneFunc(filter)
|
return c.volumePruneFunc(filter)
|
||||||
}
|
}
|
||||||
return types.VolumesPruneReport{}, nil
|
return volume.PruneReport{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *fakeClient) VolumeRemove(_ context.Context, volumeID string, force bool) error {
|
func (c *fakeClient) VolumeRemove(_ context.Context, volumeID string, force bool) error {
|
||||||
|
|
|
@ -10,8 +10,8 @@ import (
|
||||||
|
|
||||||
"github.com/docker/cli/cli/streams"
|
"github.com/docker/cli/cli/streams"
|
||||||
"github.com/docker/cli/internal/test"
|
"github.com/docker/cli/internal/test"
|
||||||
"github.com/docker/docker/api/types"
|
|
||||||
"github.com/docker/docker/api/types/filters"
|
"github.com/docker/docker/api/types/filters"
|
||||||
|
"github.com/docker/docker/api/types/volume"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"gotest.tools/v3/assert"
|
"gotest.tools/v3/assert"
|
||||||
is "gotest.tools/v3/assert/cmp"
|
is "gotest.tools/v3/assert/cmp"
|
||||||
|
@ -24,7 +24,7 @@ func TestVolumePruneErrors(t *testing.T) {
|
||||||
name string
|
name string
|
||||||
args []string
|
args []string
|
||||||
flags map[string]string
|
flags map[string]string
|
||||||
volumePruneFunc func(args filters.Args) (types.VolumesPruneReport, error)
|
volumePruneFunc func(args filters.Args) (volume.PruneReport, error)
|
||||||
expectedError string
|
expectedError string
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
|
@ -37,8 +37,8 @@ func TestVolumePruneErrors(t *testing.T) {
|
||||||
flags: map[string]string{
|
flags: map[string]string{
|
||||||
"force": "true",
|
"force": "true",
|
||||||
},
|
},
|
||||||
volumePruneFunc: func(args filters.Args) (types.VolumesPruneReport, error) {
|
volumePruneFunc: func(args filters.Args) (volume.PruneReport, error) {
|
||||||
return types.VolumesPruneReport{}, errors.Errorf("error pruning volumes")
|
return volume.PruneReport{}, errors.Errorf("error pruning volumes")
|
||||||
},
|
},
|
||||||
expectedError: "error pruning volumes",
|
expectedError: "error pruning volumes",
|
||||||
},
|
},
|
||||||
|
@ -75,31 +75,31 @@ func TestVolumePruneSuccess(t *testing.T) {
|
||||||
name string
|
name string
|
||||||
args []string
|
args []string
|
||||||
input string
|
input string
|
||||||
volumePruneFunc func(args filters.Args) (types.VolumesPruneReport, error)
|
volumePruneFunc func(args filters.Args) (volume.PruneReport, error)
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "all",
|
name: "all",
|
||||||
args: []string{"--all"},
|
args: []string{"--all"},
|
||||||
input: "y",
|
input: "y",
|
||||||
volumePruneFunc: func(pruneFilter filters.Args) (types.VolumesPruneReport, error) {
|
volumePruneFunc: func(pruneFilter filters.Args) (volume.PruneReport, error) {
|
||||||
assert.Check(t, is.DeepEqual([]string{"true"}, pruneFilter.Get("all")))
|
assert.Check(t, is.DeepEqual([]string{"true"}, pruneFilter.Get("all")))
|
||||||
return types.VolumesPruneReport{}, nil
|
return volume.PruneReport{}, nil
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "all-forced",
|
name: "all-forced",
|
||||||
args: []string{"--all", "--force"},
|
args: []string{"--all", "--force"},
|
||||||
volumePruneFunc: func(pruneFilter filters.Args) (types.VolumesPruneReport, error) {
|
volumePruneFunc: func(pruneFilter filters.Args) (volume.PruneReport, error) {
|
||||||
return types.VolumesPruneReport{}, nil
|
return volume.PruneReport{}, nil
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "label-filter",
|
name: "label-filter",
|
||||||
args: []string{"--filter", "label=foobar"},
|
args: []string{"--filter", "label=foobar"},
|
||||||
input: "y",
|
input: "y",
|
||||||
volumePruneFunc: func(pruneFilter filters.Args) (types.VolumesPruneReport, error) {
|
volumePruneFunc: func(pruneFilter filters.Args) (volume.PruneReport, error) {
|
||||||
assert.Check(t, is.DeepEqual([]string{"foobar"}, pruneFilter.Get("label")))
|
assert.Check(t, is.DeepEqual([]string{"foobar"}, pruneFilter.Get("label")))
|
||||||
return types.VolumesPruneReport{}, nil
|
return volume.PruneReport{}, nil
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@ -123,7 +123,7 @@ func TestVolumePruneSuccess(t *testing.T) {
|
||||||
func TestVolumePruneForce(t *testing.T) {
|
func TestVolumePruneForce(t *testing.T) {
|
||||||
testCases := []struct {
|
testCases := []struct {
|
||||||
name string
|
name string
|
||||||
volumePruneFunc func(args filters.Args) (types.VolumesPruneReport, error)
|
volumePruneFunc func(args filters.Args) (volume.PruneReport, error)
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "empty",
|
name: "empty",
|
||||||
|
@ -178,8 +178,8 @@ func TestVolumePrunePromptNo(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func simplePruneFunc(filters.Args) (types.VolumesPruneReport, error) {
|
func simplePruneFunc(filters.Args) (volume.PruneReport, error) {
|
||||||
return types.VolumesPruneReport{
|
return volume.PruneReport{
|
||||||
VolumesDeleted: []string{
|
VolumesDeleted: []string{
|
||||||
"foo", "bar", "baz",
|
"foo", "bar", "baz",
|
||||||
},
|
},
|
||||||
|
@ -192,8 +192,8 @@ func TestVolumePrunePromptTerminate(t *testing.T) {
|
||||||
t.Cleanup(cancel)
|
t.Cleanup(cancel)
|
||||||
|
|
||||||
cli := test.NewFakeCli(&fakeClient{
|
cli := test.NewFakeCli(&fakeClient{
|
||||||
volumePruneFunc: func(filter filters.Args) (types.VolumesPruneReport, error) {
|
volumePruneFunc: func(filter filters.Args) (volume.PruneReport, error) {
|
||||||
return types.VolumesPruneReport{}, errors.New("fakeClient volumePruneFunc should not be called")
|
return volume.PruneReport{}, errors.New("fakeClient volumePruneFunc should not be called")
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,7 @@ require (
|
||||||
github.com/creack/pty v1.1.21
|
github.com/creack/pty v1.1.21
|
||||||
github.com/distribution/reference v0.6.0
|
github.com/distribution/reference v0.6.0
|
||||||
github.com/docker/distribution v2.8.3+incompatible
|
github.com/docker/distribution v2.8.3+incompatible
|
||||||
github.com/docker/docker v26.1.1-0.20240607121412-59996a493cfc+incompatible // master (v27.0.0-dev)
|
github.com/docker/docker v26.1.1-0.20240610145149-a736d0701c41+incompatible // master (v27.0.0-dev)
|
||||||
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/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5
|
||||||
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 v26.1.1-0.20240607121412-59996a493cfc+incompatible h1:MQR7fZxS7agfjACehtep/M6Bvz7/pFvbOcFvtTmvKlg=
|
github.com/docker/docker v26.1.1-0.20240610145149-a736d0701c41+incompatible h1:Kraon288jb3POkrmM5w6Xo979z2rrCtFzHycAjafRes=
|
||||||
github.com/docker/docker v26.1.1-0.20240607121412-59996a493cfc+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
github.com/docker/docker v26.1.1-0.20240610145149-a736d0701c41+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=
|
||||||
|
|
|
@ -1198,13 +1198,6 @@ definitions:
|
||||||
ContainerConfig:
|
ContainerConfig:
|
||||||
description: |
|
description: |
|
||||||
Configuration for a container that is portable between hosts.
|
Configuration for a container that is portable between hosts.
|
||||||
|
|
||||||
When used as `ContainerConfig` field in an image, `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.
|
|
||||||
type: "object"
|
type: "object"
|
||||||
properties:
|
properties:
|
||||||
Hostname:
|
Hostname:
|
||||||
|
@ -1363,6 +1356,277 @@ definitions:
|
||||||
type: "string"
|
type: "string"
|
||||||
example: ["/bin/sh", "-c"]
|
example: ["/bin/sh", "-c"]
|
||||||
|
|
||||||
|
ImageConfig:
|
||||||
|
description: |
|
||||||
|
Configuration of the image. These fields are used as defaults
|
||||||
|
when starting a container from the image.
|
||||||
|
type: "object"
|
||||||
|
properties:
|
||||||
|
Hostname:
|
||||||
|
description: |
|
||||||
|
The hostname to use for the container, as a valid RFC 1123 hostname.
|
||||||
|
|
||||||
|
<p><br /></p>
|
||||||
|
|
||||||
|
> **Note**: this field is always empty and must not be used.
|
||||||
|
type: "string"
|
||||||
|
example: ""
|
||||||
|
Domainname:
|
||||||
|
description: |
|
||||||
|
The domain name to use for the container.
|
||||||
|
|
||||||
|
<p><br /></p>
|
||||||
|
|
||||||
|
> **Note**: this field is always empty and must not be used.
|
||||||
|
type: "string"
|
||||||
|
example: ""
|
||||||
|
User:
|
||||||
|
description: "The user that commands are run as inside the container."
|
||||||
|
type: "string"
|
||||||
|
example: "web:web"
|
||||||
|
AttachStdin:
|
||||||
|
description: |
|
||||||
|
Whether to attach to `stdin`.
|
||||||
|
|
||||||
|
<p><br /></p>
|
||||||
|
|
||||||
|
> **Note**: this field is always false and must not be used.
|
||||||
|
type: "boolean"
|
||||||
|
default: false
|
||||||
|
example: false
|
||||||
|
AttachStdout:
|
||||||
|
description: |
|
||||||
|
Whether to attach to `stdout`.
|
||||||
|
|
||||||
|
<p><br /></p>
|
||||||
|
|
||||||
|
> **Note**: this field is always false and must not be used.
|
||||||
|
type: "boolean"
|
||||||
|
default: false
|
||||||
|
example: false
|
||||||
|
AttachStderr:
|
||||||
|
description: |
|
||||||
|
Whether to attach to `stderr`.
|
||||||
|
|
||||||
|
<p><br /></p>
|
||||||
|
|
||||||
|
> **Note**: this field is always false and must not be used.
|
||||||
|
type: "boolean"
|
||||||
|
default: false
|
||||||
|
example: false
|
||||||
|
ExposedPorts:
|
||||||
|
description: |
|
||||||
|
An object mapping ports to an empty object in the form:
|
||||||
|
|
||||||
|
`{"<port>/<tcp|udp|sctp>": {}}`
|
||||||
|
type: "object"
|
||||||
|
x-nullable: true
|
||||||
|
additionalProperties:
|
||||||
|
type: "object"
|
||||||
|
enum:
|
||||||
|
- {}
|
||||||
|
default: {}
|
||||||
|
example: {
|
||||||
|
"80/tcp": {},
|
||||||
|
"443/tcp": {}
|
||||||
|
}
|
||||||
|
Tty:
|
||||||
|
description: |
|
||||||
|
Attach standard streams to a TTY, including `stdin` if it is not closed.
|
||||||
|
|
||||||
|
<p><br /></p>
|
||||||
|
|
||||||
|
> **Note**: this field is always false and must not be used.
|
||||||
|
type: "boolean"
|
||||||
|
default: false
|
||||||
|
example: false
|
||||||
|
OpenStdin:
|
||||||
|
description: |
|
||||||
|
Open `stdin`
|
||||||
|
|
||||||
|
<p><br /></p>
|
||||||
|
|
||||||
|
> **Note**: this field is always false and must not be used.
|
||||||
|
type: "boolean"
|
||||||
|
default: false
|
||||||
|
example: false
|
||||||
|
StdinOnce:
|
||||||
|
description: |
|
||||||
|
Close `stdin` after one attached client disconnects.
|
||||||
|
|
||||||
|
<p><br /></p>
|
||||||
|
|
||||||
|
> **Note**: this field is always false and must not be used.
|
||||||
|
type: "boolean"
|
||||||
|
default: false
|
||||||
|
example: false
|
||||||
|
Env:
|
||||||
|
description: |
|
||||||
|
A list of environment variables to set inside the container in the
|
||||||
|
form `["VAR=value", ...]`. A variable without `=` is removed from the
|
||||||
|
environment, rather than to have an empty value.
|
||||||
|
type: "array"
|
||||||
|
items:
|
||||||
|
type: "string"
|
||||||
|
example:
|
||||||
|
- "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
|
||||||
|
Cmd:
|
||||||
|
description: |
|
||||||
|
Command to run specified as a string or an array of strings.
|
||||||
|
type: "array"
|
||||||
|
items:
|
||||||
|
type: "string"
|
||||||
|
example: ["/bin/sh"]
|
||||||
|
Healthcheck:
|
||||||
|
$ref: "#/definitions/HealthConfig"
|
||||||
|
ArgsEscaped:
|
||||||
|
description: "Command is already escaped (Windows only)"
|
||||||
|
type: "boolean"
|
||||||
|
default: false
|
||||||
|
example: false
|
||||||
|
x-nullable: true
|
||||||
|
Image:
|
||||||
|
description: |
|
||||||
|
The name (or reference) of the image to use when creating the container,
|
||||||
|
or which was used when the container was created.
|
||||||
|
|
||||||
|
<p><br /></p>
|
||||||
|
|
||||||
|
> **Note**: this field is always empty and must not be used.
|
||||||
|
type: "string"
|
||||||
|
default: ""
|
||||||
|
example: ""
|
||||||
|
Volumes:
|
||||||
|
description: |
|
||||||
|
An object mapping mount point paths inside the container to empty
|
||||||
|
objects.
|
||||||
|
type: "object"
|
||||||
|
additionalProperties:
|
||||||
|
type: "object"
|
||||||
|
enum:
|
||||||
|
- {}
|
||||||
|
default: {}
|
||||||
|
example:
|
||||||
|
"/app/data": {}
|
||||||
|
"/app/config": {}
|
||||||
|
WorkingDir:
|
||||||
|
description: "The working directory for commands to run in."
|
||||||
|
type: "string"
|
||||||
|
example: "/public/"
|
||||||
|
Entrypoint:
|
||||||
|
description: |
|
||||||
|
The entry point for the container as a string or an array of strings.
|
||||||
|
|
||||||
|
If the array consists of exactly one empty string (`[""]`) then the
|
||||||
|
entry point is reset to system default (i.e., the entry point used by
|
||||||
|
docker when there is no `ENTRYPOINT` instruction in the `Dockerfile`).
|
||||||
|
type: "array"
|
||||||
|
items:
|
||||||
|
type: "string"
|
||||||
|
example: []
|
||||||
|
NetworkDisabled:
|
||||||
|
description: |
|
||||||
|
Disable networking for the container.
|
||||||
|
|
||||||
|
<p><br /></p>
|
||||||
|
|
||||||
|
> **Note**: this field is always omitted and must not be used.
|
||||||
|
type: "boolean"
|
||||||
|
default: false
|
||||||
|
example: false
|
||||||
|
x-nullable: true
|
||||||
|
MacAddress:
|
||||||
|
description: |
|
||||||
|
MAC address of the container.
|
||||||
|
|
||||||
|
<p><br /></p>
|
||||||
|
|
||||||
|
> **Deprecated**: this field is deprecated in API v1.44 and up. It is always omitted.
|
||||||
|
type: "string"
|
||||||
|
default: ""
|
||||||
|
example: ""
|
||||||
|
x-nullable: true
|
||||||
|
OnBuild:
|
||||||
|
description: |
|
||||||
|
`ONBUILD` metadata that were defined in the image's `Dockerfile`.
|
||||||
|
type: "array"
|
||||||
|
x-nullable: true
|
||||||
|
items:
|
||||||
|
type: "string"
|
||||||
|
example: []
|
||||||
|
Labels:
|
||||||
|
description: "User-defined key/value metadata."
|
||||||
|
type: "object"
|
||||||
|
additionalProperties:
|
||||||
|
type: "string"
|
||||||
|
example:
|
||||||
|
com.example.some-label: "some-value"
|
||||||
|
com.example.some-other-label: "some-other-value"
|
||||||
|
StopSignal:
|
||||||
|
description: |
|
||||||
|
Signal to stop a container as a string or unsigned integer.
|
||||||
|
type: "string"
|
||||||
|
example: "SIGTERM"
|
||||||
|
x-nullable: true
|
||||||
|
StopTimeout:
|
||||||
|
description: |
|
||||||
|
Timeout to stop a container in seconds.
|
||||||
|
|
||||||
|
<p><br /></p>
|
||||||
|
|
||||||
|
> **Note**: this field is always omitted and must not be used.
|
||||||
|
type: "integer"
|
||||||
|
default: 10
|
||||||
|
x-nullable: true
|
||||||
|
Shell:
|
||||||
|
description: |
|
||||||
|
Shell for when `RUN`, `CMD`, and `ENTRYPOINT` uses a shell.
|
||||||
|
type: "array"
|
||||||
|
x-nullable: true
|
||||||
|
items:
|
||||||
|
type: "string"
|
||||||
|
example: ["/bin/sh", "-c"]
|
||||||
|
# FIXME(thaJeztah): temporarily using a full example to remove some "omitempty" fields. Remove once the fields are removed.
|
||||||
|
example:
|
||||||
|
"Hostname": ""
|
||||||
|
"Domainname": ""
|
||||||
|
"User": "web:web"
|
||||||
|
"AttachStdin": false
|
||||||
|
"AttachStdout": false
|
||||||
|
"AttachStderr": false
|
||||||
|
"ExposedPorts": {
|
||||||
|
"80/tcp": {},
|
||||||
|
"443/tcp": {}
|
||||||
|
}
|
||||||
|
"Tty": false
|
||||||
|
"OpenStdin": false
|
||||||
|
"StdinOnce": false
|
||||||
|
"Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"]
|
||||||
|
"Cmd": ["/bin/sh"]
|
||||||
|
"Healthcheck": {
|
||||||
|
"Test": ["string"],
|
||||||
|
"Interval": 0,
|
||||||
|
"Timeout": 0,
|
||||||
|
"Retries": 0,
|
||||||
|
"StartPeriod": 0,
|
||||||
|
"StartInterval": 0
|
||||||
|
}
|
||||||
|
"ArgsEscaped": true
|
||||||
|
"Image": ""
|
||||||
|
"Volumes": {
|
||||||
|
"/app/data": {},
|
||||||
|
"/app/config": {}
|
||||||
|
}
|
||||||
|
"WorkingDir": "/public/"
|
||||||
|
"Entrypoint": []
|
||||||
|
"OnBuild": []
|
||||||
|
"Labels": {
|
||||||
|
"com.example.some-label": "some-value",
|
||||||
|
"com.example.some-other-label": "some-other-value"
|
||||||
|
}
|
||||||
|
"StopSignal": "SIGTERM"
|
||||||
|
"Shell": ["/bin/sh", "-c"]
|
||||||
|
|
||||||
NetworkingConfig:
|
NetworkingConfig:
|
||||||
description: |
|
description: |
|
||||||
NetworkingConfig represents the container's networking configuration for
|
NetworkingConfig represents the container's networking configuration for
|
||||||
|
@ -1758,21 +2022,6 @@ definitions:
|
||||||
format: "dateTime"
|
format: "dateTime"
|
||||||
x-nullable: true
|
x-nullable: true
|
||||||
example: "2022-02-04T21:20:12.497794809Z"
|
example: "2022-02-04T21:20:12.497794809Z"
|
||||||
Container:
|
|
||||||
description: |
|
|
||||||
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 kept for backward compatibility, but
|
|
||||||
will be removed in API v1.45.
|
|
||||||
type: "string"
|
|
||||||
example: "65974bc86f1770ae4bff79f651ebdbce166ae9aada632ee3fa9af3a264911735"
|
|
||||||
ContainerConfig:
|
|
||||||
description: |
|
|
||||||
**Deprecated**: this field is kept for backward compatibility, but
|
|
||||||
will be removed in API v1.45.
|
|
||||||
$ref: "#/definitions/ContainerConfig"
|
|
||||||
DockerVersion:
|
DockerVersion:
|
||||||
description: |
|
description: |
|
||||||
The version of Docker that was used to build the image.
|
The version of Docker that was used to build the image.
|
||||||
|
@ -1789,7 +2038,7 @@ definitions:
|
||||||
x-nullable: false
|
x-nullable: false
|
||||||
example: ""
|
example: ""
|
||||||
Config:
|
Config:
|
||||||
$ref: "#/definitions/ContainerConfig"
|
$ref: "#/definitions/ImageConfig"
|
||||||
Architecture:
|
Architecture:
|
||||||
description: |
|
description: |
|
||||||
Hardware CPU architecture that the image runs on.
|
Hardware CPU architecture that the image runs on.
|
||||||
|
|
|
@ -12,29 +12,6 @@ import (
|
||||||
units "github.com/docker/go-units"
|
units "github.com/docker/go-units"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ContainerExecInspect holds information returned by exec inspect.
|
|
||||||
type ContainerExecInspect struct {
|
|
||||||
ExecID string `json:"ID"`
|
|
||||||
ContainerID string
|
|
||||||
Running bool
|
|
||||||
ExitCode int
|
|
||||||
Pid int
|
|
||||||
}
|
|
||||||
|
|
||||||
// CopyToContainerOptions holds information
|
|
||||||
// about files to copy into a container
|
|
||||||
type CopyToContainerOptions struct {
|
|
||||||
AllowOverwriteDirWithFile bool
|
|
||||||
CopyUIDGID bool
|
|
||||||
}
|
|
||||||
|
|
||||||
// EventsOptions holds parameters to filter events with.
|
|
||||||
type EventsOptions struct {
|
|
||||||
Since string
|
|
||||||
Until string
|
|
||||||
Filters filters.Args
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewHijackedResponse intializes a HijackedResponse type
|
// NewHijackedResponse intializes a HijackedResponse type
|
||||||
func NewHijackedResponse(conn net.Conn, mediaType string) HijackedResponse {
|
func NewHijackedResponse(conn net.Conn, mediaType string) HijackedResponse {
|
||||||
return HijackedResponse{Conn: conn, Reader: bufio.NewReader(conn), mediaType: mediaType}
|
return HijackedResponse{Conn: conn, Reader: bufio.NewReader(conn), mediaType: mediaType}
|
||||||
|
@ -153,19 +130,6 @@ type ImageBuildResponse struct {
|
||||||
OSType string
|
OSType string
|
||||||
}
|
}
|
||||||
|
|
||||||
// ImageImportSource holds source information for ImageImport
|
|
||||||
type ImageImportSource struct {
|
|
||||||
Source io.Reader // Source is the data to send to the server to create this image from. You must set SourceName to "-" to leverage this.
|
|
||||||
SourceName string // SourceName is the name of the image to pull. Set to "-" to leverage the Source attribute.
|
|
||||||
}
|
|
||||||
|
|
||||||
// ImageLoadResponse returns information to the client about a load process.
|
|
||||||
type ImageLoadResponse struct {
|
|
||||||
// Body must be closed to avoid a resource leak
|
|
||||||
Body io.ReadCloser
|
|
||||||
JSON bool
|
|
||||||
}
|
|
||||||
|
|
||||||
// RequestPrivilegeFunc is a function interface that
|
// RequestPrivilegeFunc is a function interface that
|
||||||
// clients can supply to retry operations after
|
// clients can supply to retry operations after
|
||||||
// getting an authorization error.
|
// getting an authorization error.
|
||||||
|
@ -174,14 +138,6 @@ type ImageLoadResponse struct {
|
||||||
// if the privilege request fails.
|
// if the privilege request fails.
|
||||||
type RequestPrivilegeFunc func(context.Context) (string, error)
|
type RequestPrivilegeFunc func(context.Context) (string, error)
|
||||||
|
|
||||||
// ImageSearchOptions holds parameters to search images with.
|
|
||||||
type ImageSearchOptions struct {
|
|
||||||
RegistryAuth string
|
|
||||||
PrivilegeFunc RequestPrivilegeFunc
|
|
||||||
Filters filters.Args
|
|
||||||
Limit int
|
|
||||||
}
|
|
||||||
|
|
||||||
// NodeListOptions holds parameters to list nodes with.
|
// NodeListOptions holds parameters to list nodes with.
|
||||||
type NodeListOptions struct {
|
type NodeListOptions struct {
|
||||||
Filters filters.Args
|
Filters filters.Args
|
||||||
|
|
|
@ -1,18 +0,0 @@
|
||||||
package types // import "github.com/docker/docker/api/types"
|
|
||||||
|
|
||||||
// ExecConfig is a small subset of the Config struct that holds the configuration
|
|
||||||
// for the exec feature of docker.
|
|
||||||
type ExecConfig struct {
|
|
||||||
User string // User that will run the command
|
|
||||||
Privileged bool // Is the container in privileged mode
|
|
||||||
Tty bool // Attach standard streams to a tty.
|
|
||||||
ConsoleSize *[2]uint `json:",omitempty"` // Initial console size [height, width]
|
|
||||||
AttachStdin bool // Attach the standard input, makes possible user interaction
|
|
||||||
AttachStderr bool // Attach the standard error
|
|
||||||
AttachStdout bool // Attach the standard output
|
|
||||||
Detach bool // Execute in detach mode
|
|
||||||
DetachKeys string // Escape keys for detach
|
|
||||||
Env []string // Environment variables
|
|
||||||
WorkingDir string // Working directory
|
|
||||||
Cmd []string // Execution commands and args
|
|
||||||
}
|
|
|
@ -1,7 +1,6 @@
|
||||||
package container // import "github.com/docker/docker/api/types/container"
|
package container // import "github.com/docker/docker/api/types/container"
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"io"
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/docker/docker/api/types/strslice"
|
"github.com/docker/docker/api/types/strslice"
|
||||||
|
@ -36,14 +35,6 @@ type StopOptions struct {
|
||||||
// HealthConfig holds configuration settings for the HEALTHCHECK feature.
|
// HealthConfig holds configuration settings for the HEALTHCHECK feature.
|
||||||
type HealthConfig = dockerspec.HealthcheckConfig
|
type HealthConfig = dockerspec.HealthcheckConfig
|
||||||
|
|
||||||
// ExecStartOptions holds the options to start container's exec.
|
|
||||||
type ExecStartOptions struct {
|
|
||||||
Stdin io.Reader
|
|
||||||
Stdout io.Writer
|
|
||||||
Stderr io.Writer
|
|
||||||
ConsoleSize *[2]uint `json:",omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// Config contains the configuration data about a container.
|
// Config contains the configuration data about a container.
|
||||||
// It should hold only portable information about the container.
|
// It should hold only portable information about the container.
|
||||||
// Here, "portable" means "independent from the host we are running on".
|
// Here, "portable" means "independent from the host we are running on".
|
||||||
|
|
|
@ -0,0 +1,39 @@
|
||||||
|
package container
|
||||||
|
|
||||||
|
import (
|
||||||
|
"io"
|
||||||
|
"os"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// PruneReport contains the response for Engine API:
|
||||||
|
// POST "/containers/prune"
|
||||||
|
type PruneReport struct {
|
||||||
|
ContainersDeleted []string
|
||||||
|
SpaceReclaimed uint64
|
||||||
|
}
|
||||||
|
|
||||||
|
// PathStat is used to encode the header from
|
||||||
|
// GET "/containers/{name:.*}/archive"
|
||||||
|
// "Name" is the file or directory name.
|
||||||
|
type PathStat struct {
|
||||||
|
Name string `json:"name"`
|
||||||
|
Size int64 `json:"size"`
|
||||||
|
Mode os.FileMode `json:"mode"`
|
||||||
|
Mtime time.Time `json:"mtime"`
|
||||||
|
LinkTarget string `json:"linkTarget"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// CopyToContainerOptions holds information
|
||||||
|
// about files to copy into a container
|
||||||
|
type CopyToContainerOptions struct {
|
||||||
|
AllowOverwriteDirWithFile bool
|
||||||
|
CopyUIDGID bool
|
||||||
|
}
|
||||||
|
|
||||||
|
// StatsResponse contains response of Engine API:
|
||||||
|
// GET "/stats"
|
||||||
|
type StatsResponse struct {
|
||||||
|
Body io.ReadCloser `json:"body"`
|
||||||
|
OSType string `json:"ostype"`
|
||||||
|
}
|
|
@ -0,0 +1,43 @@
|
||||||
|
package container
|
||||||
|
|
||||||
|
// ExecOptions is a small subset of the Config struct that holds the configuration
|
||||||
|
// for the exec feature of docker.
|
||||||
|
type ExecOptions struct {
|
||||||
|
User string // User that will run the command
|
||||||
|
Privileged bool // Is the container in privileged mode
|
||||||
|
Tty bool // Attach standard streams to a tty.
|
||||||
|
ConsoleSize *[2]uint `json:",omitempty"` // Initial console size [height, width]
|
||||||
|
AttachStdin bool // Attach the standard input, makes possible user interaction
|
||||||
|
AttachStderr bool // Attach the standard error
|
||||||
|
AttachStdout bool // Attach the standard output
|
||||||
|
Detach bool // Execute in detach mode
|
||||||
|
DetachKeys string // Escape keys for detach
|
||||||
|
Env []string // Environment variables
|
||||||
|
WorkingDir string // Working directory
|
||||||
|
Cmd []string // Execution commands and args
|
||||||
|
}
|
||||||
|
|
||||||
|
// ExecStartOptions is a temp struct used by execStart
|
||||||
|
// Config fields is part of ExecConfig in runconfig package
|
||||||
|
type ExecStartOptions struct {
|
||||||
|
// ExecStart will first check if it's detached
|
||||||
|
Detach bool
|
||||||
|
// Check if there's a tty
|
||||||
|
Tty bool
|
||||||
|
// Terminal size [height, width], unused if Tty == false
|
||||||
|
ConsoleSize *[2]uint `json:",omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// ExecAttachOptions is a temp struct used by execAttach.
|
||||||
|
//
|
||||||
|
// TODO(thaJeztah): make this a separate type; ContainerExecAttach does not use the Detach option, and cannot run detached.
|
||||||
|
type ExecAttachOptions = ExecStartOptions
|
||||||
|
|
||||||
|
// ExecInspect holds information returned by exec inspect.
|
||||||
|
type ExecInspect struct {
|
||||||
|
ExecID string `json:"ID"`
|
||||||
|
ContainerID string
|
||||||
|
Running bool
|
||||||
|
ExitCode int
|
||||||
|
Pid int
|
||||||
|
}
|
|
@ -1,4 +1,5 @@
|
||||||
package events // import "github.com/docker/docker/api/types/events"
|
package events // import "github.com/docker/docker/api/types/events"
|
||||||
|
import "github.com/docker/docker/api/types/filters"
|
||||||
|
|
||||||
// Type is used for event-types.
|
// Type is used for event-types.
|
||||||
type Type string
|
type Type string
|
||||||
|
@ -125,3 +126,10 @@ type Message struct {
|
||||||
Time int64 `json:"time,omitempty"`
|
Time int64 `json:"time,omitempty"`
|
||||||
TimeNano int64 `json:"timeNano,omitempty"`
|
TimeNano int64 `json:"timeNano,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ListOptions holds parameters to filter events with.
|
||||||
|
type ListOptions struct {
|
||||||
|
Since string
|
||||||
|
Until string
|
||||||
|
Filters filters.Args
|
||||||
|
}
|
||||||
|
|
|
@ -1,9 +1,47 @@
|
||||||
package image
|
package image
|
||||||
|
|
||||||
import "time"
|
import (
|
||||||
|
"io"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
// Metadata contains engine-local data about the image.
|
// Metadata contains engine-local data about the image.
|
||||||
type Metadata struct {
|
type Metadata struct {
|
||||||
// LastTagTime is the date and time at which the image was last tagged.
|
// LastTagTime is the date and time at which the image was last tagged.
|
||||||
LastTagTime time.Time `json:",omitempty"`
|
LastTagTime time.Time `json:",omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// PruneReport contains the response for Engine API:
|
||||||
|
// POST "/images/prune"
|
||||||
|
type PruneReport struct {
|
||||||
|
ImagesDeleted []DeleteResponse
|
||||||
|
SpaceReclaimed uint64
|
||||||
|
}
|
||||||
|
|
||||||
|
// LoadResponse returns information to the client about a load process.
|
||||||
|
//
|
||||||
|
// TODO(thaJeztah): remove this type, and just use an io.ReadCloser
|
||||||
|
//
|
||||||
|
// This type was added in https://github.com/moby/moby/pull/18878, related
|
||||||
|
// to https://github.com/moby/moby/issues/19177;
|
||||||
|
//
|
||||||
|
// Make docker load to output json when the response content type is json
|
||||||
|
// Swarm hijacks the response from docker load and returns JSON rather
|
||||||
|
// than plain text like the Engine does. This makes the API library to return
|
||||||
|
// information to figure that out.
|
||||||
|
//
|
||||||
|
// However the "load" endpoint unconditionally returns JSON;
|
||||||
|
// https://github.com/moby/moby/blob/7b9d2ef6e5518a3d3f3cc418459f8df786cfbbd1/api/server/router/image/image_routes.go#L248-L255
|
||||||
|
//
|
||||||
|
// PR https://github.com/moby/moby/pull/21959 made the response-type depend
|
||||||
|
// on whether "quiet" was set, but this logic got changed in a follow-up
|
||||||
|
// https://github.com/moby/moby/pull/25557, which made the JSON response-type
|
||||||
|
// unconditionally, but the output produced depend on whether"quiet" was set.
|
||||||
|
//
|
||||||
|
// We should deprecated the "quiet" option, as it's really a client
|
||||||
|
// responsibility.
|
||||||
|
type LoadResponse struct {
|
||||||
|
// Body must be closed to avoid a resource leak
|
||||||
|
Body io.ReadCloser
|
||||||
|
JSON bool
|
||||||
|
}
|
||||||
|
|
|
@ -2,10 +2,17 @@ package image
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"io"
|
||||||
|
|
||||||
"github.com/docker/docker/api/types/filters"
|
"github.com/docker/docker/api/types/filters"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// ImportSource holds source information for ImageImport
|
||||||
|
type ImportSource struct {
|
||||||
|
Source io.Reader // Source is the data to send to the server to create this image from. You must set SourceName to "-" to leverage this.
|
||||||
|
SourceName string // SourceName is the name of the image to pull. Set to "-" to leverage the Source attribute.
|
||||||
|
}
|
||||||
|
|
||||||
// ImportOptions holds information to import images from the client host.
|
// ImportOptions holds information to import images from the client host.
|
||||||
type ImportOptions struct {
|
type ImportOptions struct {
|
||||||
Tag string // Tag is the name to tag this image with. This attribute is deprecated.
|
Tag string // Tag is the name to tag this image with. This attribute is deprecated.
|
||||||
|
|
|
@ -84,32 +84,6 @@ type IndexInfo struct {
|
||||||
Official bool
|
Official bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// SearchResult describes a search result returned from a registry
|
|
||||||
type SearchResult struct {
|
|
||||||
// StarCount indicates the number of stars this repository has
|
|
||||||
StarCount int `json:"star_count"`
|
|
||||||
// IsOfficial is true if the result is from an official repository.
|
|
||||||
IsOfficial bool `json:"is_official"`
|
|
||||||
// Name is the name of the repository
|
|
||||||
Name string `json:"name"`
|
|
||||||
// IsAutomated indicates whether the result is automated.
|
|
||||||
//
|
|
||||||
// Deprecated: the "is_automated" field is deprecated and will always be "false".
|
|
||||||
IsAutomated bool `json:"is_automated"`
|
|
||||||
// Description is a textual description of the repository
|
|
||||||
Description string `json:"description"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// SearchResults lists a collection search results returned from a registry
|
|
||||||
type SearchResults struct {
|
|
||||||
// Query contains the query string that generated the search results
|
|
||||||
Query string `json:"query"`
|
|
||||||
// NumResults indicates the number of results the query returned
|
|
||||||
NumResults int `json:"num_results"`
|
|
||||||
// Results is a slice containing the actual results for the search
|
|
||||||
Results []SearchResult `json:"results"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// DistributionInspect describes the result obtained from contacting the
|
// DistributionInspect describes the result obtained from contacting the
|
||||||
// registry to retrieve image metadata
|
// registry to retrieve image metadata
|
||||||
type DistributionInspect struct {
|
type DistributionInspect struct {
|
||||||
|
|
|
@ -0,0 +1,47 @@
|
||||||
|
package registry
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"github.com/docker/docker/api/types/filters"
|
||||||
|
)
|
||||||
|
|
||||||
|
// SearchOptions holds parameters to search images with.
|
||||||
|
type SearchOptions struct {
|
||||||
|
RegistryAuth string
|
||||||
|
|
||||||
|
// PrivilegeFunc is a [types.RequestPrivilegeFunc] the client can
|
||||||
|
// supply to retry operations after getting an authorization error.
|
||||||
|
//
|
||||||
|
// It must return the registry authentication header value in base64
|
||||||
|
// format, or an error if the privilege request fails.
|
||||||
|
PrivilegeFunc func(context.Context) (string, error)
|
||||||
|
Filters filters.Args
|
||||||
|
Limit int
|
||||||
|
}
|
||||||
|
|
||||||
|
// SearchResult describes a search result returned from a registry
|
||||||
|
type SearchResult struct {
|
||||||
|
// StarCount indicates the number of stars this repository has
|
||||||
|
StarCount int `json:"star_count"`
|
||||||
|
// IsOfficial is true if the result is from an official repository.
|
||||||
|
IsOfficial bool `json:"is_official"`
|
||||||
|
// Name is the name of the repository
|
||||||
|
Name string `json:"name"`
|
||||||
|
// IsAutomated indicates whether the result is automated.
|
||||||
|
//
|
||||||
|
// Deprecated: the "is_automated" field is deprecated and will always be "false".
|
||||||
|
IsAutomated bool `json:"is_automated"`
|
||||||
|
// Description is a textual description of the repository
|
||||||
|
Description string `json:"description"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// SearchResults lists a collection search results returned from a registry
|
||||||
|
type SearchResults struct {
|
||||||
|
// Query contains the query string that generated the search results
|
||||||
|
Query string `json:"query"`
|
||||||
|
// NumResults indicates the number of results the query returned
|
||||||
|
NumResults int `json:"num_results"`
|
||||||
|
// Results is a slice containing the actual results for the search
|
||||||
|
Results []SearchResult `json:"results"`
|
||||||
|
}
|
|
@ -1,8 +1,6 @@
|
||||||
package types // import "github.com/docker/docker/api/types"
|
package types // import "github.com/docker/docker/api/types"
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"io"
|
|
||||||
"os"
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/docker/docker/api/types/container"
|
"github.com/docker/docker/api/types/container"
|
||||||
|
@ -162,30 +160,6 @@ type Container struct {
|
||||||
Mounts []MountPoint
|
Mounts []MountPoint
|
||||||
}
|
}
|
||||||
|
|
||||||
// CopyConfig contains request body of Engine API:
|
|
||||||
// POST "/containers/"+containerID+"/copy"
|
|
||||||
type CopyConfig struct {
|
|
||||||
Resource string
|
|
||||||
}
|
|
||||||
|
|
||||||
// ContainerPathStat is used to encode the header from
|
|
||||||
// GET "/containers/{name:.*}/archive"
|
|
||||||
// "Name" is the file or directory name.
|
|
||||||
type ContainerPathStat struct {
|
|
||||||
Name string `json:"name"`
|
|
||||||
Size int64 `json:"size"`
|
|
||||||
Mode os.FileMode `json:"mode"`
|
|
||||||
Mtime time.Time `json:"mtime"`
|
|
||||||
LinkTarget string `json:"linkTarget"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// ContainerStats contains response of Engine API:
|
|
||||||
// GET "/stats"
|
|
||||||
type ContainerStats struct {
|
|
||||||
Body io.ReadCloser `json:"body"`
|
|
||||||
OSType string `json:"ostype"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// Ping contains response of Engine API:
|
// Ping contains response of Engine API:
|
||||||
// GET "/_ping"
|
// GET "/_ping"
|
||||||
type Ping struct {
|
type Ping struct {
|
||||||
|
@ -231,17 +205,6 @@ type Version struct {
|
||||||
BuildTime string `json:",omitempty"`
|
BuildTime string `json:",omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// ExecStartCheck is a temp struct used by execStart
|
|
||||||
// Config fields is part of ExecConfig in runconfig package
|
|
||||||
type ExecStartCheck struct {
|
|
||||||
// ExecStart will first check if it's detached
|
|
||||||
Detach bool
|
|
||||||
// Check if there's a tty
|
|
||||||
Tty bool
|
|
||||||
// Terminal size [height, width], unused if Tty == false
|
|
||||||
ConsoleSize *[2]uint `json:",omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// HealthcheckResult stores information about a single run of a healthcheck probe
|
// HealthcheckResult stores information about a single run of a healthcheck probe
|
||||||
type HealthcheckResult struct {
|
type HealthcheckResult struct {
|
||||||
Start time.Time // Start is the time this check started
|
Start time.Time // Start is the time this check started
|
||||||
|
@ -456,27 +419,6 @@ type DiskUsage struct {
|
||||||
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.
|
||||||
}
|
}
|
||||||
|
|
||||||
// ContainersPruneReport contains the response for Engine API:
|
|
||||||
// POST "/containers/prune"
|
|
||||||
type ContainersPruneReport struct {
|
|
||||||
ContainersDeleted []string
|
|
||||||
SpaceReclaimed uint64
|
|
||||||
}
|
|
||||||
|
|
||||||
// VolumesPruneReport contains the response for Engine API:
|
|
||||||
// POST "/volumes/prune"
|
|
||||||
type VolumesPruneReport struct {
|
|
||||||
VolumesDeleted []string
|
|
||||||
SpaceReclaimed uint64
|
|
||||||
}
|
|
||||||
|
|
||||||
// ImagesPruneReport contains the response for Engine API:
|
|
||||||
// POST "/images/prune"
|
|
||||||
type ImagesPruneReport struct {
|
|
||||||
ImagesDeleted []image.DeleteResponse
|
|
||||||
SpaceReclaimed uint64
|
|
||||||
}
|
|
||||||
|
|
||||||
// BuildCachePruneReport contains the response for Engine API:
|
// BuildCachePruneReport contains the response for Engine API:
|
||||||
// POST "/build/prune"
|
// POST "/build/prune"
|
||||||
type BuildCachePruneReport struct {
|
type BuildCachePruneReport struct {
|
||||||
|
|
|
@ -1,9 +1,26 @@
|
||||||
package types
|
package types
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"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/network"
|
"github.com/docker/docker/api/types/network"
|
||||||
|
"github.com/docker/docker/api/types/registry"
|
||||||
|
"github.com/docker/docker/api/types/volume"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// ImagesPruneReport contains the response for Engine API:
|
||||||
|
// POST "/images/prune"
|
||||||
|
//
|
||||||
|
// Deprecated: use [image.PruneReport].
|
||||||
|
type ImagesPruneReport = image.PruneReport
|
||||||
|
|
||||||
|
// VolumesPruneReport contains the response for Engine API:
|
||||||
|
// POST "/volumes/prune".
|
||||||
|
//
|
||||||
|
// Deprecated: use [volume.PruneReport].
|
||||||
|
type VolumesPruneReport = volume.PruneReport
|
||||||
|
|
||||||
// NetworkCreateRequest is the request message sent to the server for network create call.
|
// NetworkCreateRequest is the request message sent to the server for network create call.
|
||||||
//
|
//
|
||||||
// Deprecated: use [network.CreateRequest].
|
// Deprecated: use [network.CreateRequest].
|
||||||
|
@ -54,3 +71,65 @@ type NetworkResource = network.Inspect
|
||||||
//
|
//
|
||||||
// Deprecated: use [network.PruneReport].
|
// Deprecated: use [network.PruneReport].
|
||||||
type NetworksPruneReport = network.PruneReport
|
type NetworksPruneReport = network.PruneReport
|
||||||
|
|
||||||
|
// ExecConfig is a small subset of the Config struct that holds the configuration
|
||||||
|
// for the exec feature of docker.
|
||||||
|
//
|
||||||
|
// Deprecated: use [container.ExecOptions].
|
||||||
|
type ExecConfig = container.ExecOptions
|
||||||
|
|
||||||
|
// ExecStartCheck is a temp struct used by execStart
|
||||||
|
// Config fields is part of ExecConfig in runconfig package
|
||||||
|
//
|
||||||
|
// Deprecated: use [container.ExecStartOptions] or [container.ExecAttachOptions].
|
||||||
|
type ExecStartCheck = container.ExecStartOptions
|
||||||
|
|
||||||
|
// ContainerExecInspect holds information returned by exec inspect.
|
||||||
|
//
|
||||||
|
// Deprecated: use [container.ExecInspect].
|
||||||
|
type ContainerExecInspect = container.ExecInspect
|
||||||
|
|
||||||
|
// ContainersPruneReport contains the response for Engine API:
|
||||||
|
// POST "/containers/prune"
|
||||||
|
//
|
||||||
|
// Deprecated: use [container.PruneReport].
|
||||||
|
type ContainersPruneReport = container.PruneReport
|
||||||
|
|
||||||
|
// 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.StatsResponse].
|
||||||
|
type ContainerStats = 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
|
||||||
|
|
|
@ -6,3 +6,10 @@ import "github.com/docker/docker/api/types/filters"
|
||||||
type ListOptions struct {
|
type ListOptions struct {
|
||||||
Filters filters.Args
|
Filters filters.Args
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// PruneReport contains the response for Engine API:
|
||||||
|
// POST "/volumes/prune"
|
||||||
|
type PruneReport struct {
|
||||||
|
VolumesDeleted []string
|
||||||
|
SpaceReclaimed uint64
|
||||||
|
}
|
||||||
|
|
|
@ -11,11 +11,11 @@ import (
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/docker/docker/api/types"
|
"github.com/docker/docker/api/types/container"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ContainerStatPath returns stat information about a path inside the container filesystem.
|
// ContainerStatPath returns stat information about a path inside the container filesystem.
|
||||||
func (cli *Client) ContainerStatPath(ctx context.Context, containerID, path string) (types.ContainerPathStat, error) {
|
func (cli *Client) ContainerStatPath(ctx context.Context, containerID, path string) (container.PathStat, error) {
|
||||||
query := url.Values{}
|
query := url.Values{}
|
||||||
query.Set("path", filepath.ToSlash(path)) // Normalize the paths used in the API.
|
query.Set("path", filepath.ToSlash(path)) // Normalize the paths used in the API.
|
||||||
|
|
||||||
|
@ -23,14 +23,14 @@ func (cli *Client) ContainerStatPath(ctx context.Context, containerID, path stri
|
||||||
response, err := cli.head(ctx, urlStr, query, nil)
|
response, err := cli.head(ctx, urlStr, query, nil)
|
||||||
defer ensureReaderClosed(response)
|
defer ensureReaderClosed(response)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return types.ContainerPathStat{}, err
|
return container.PathStat{}, err
|
||||||
}
|
}
|
||||||
return getContainerPathStatFromHeader(response.header)
|
return getContainerPathStatFromHeader(response.header)
|
||||||
}
|
}
|
||||||
|
|
||||||
// CopyToContainer copies content into the container filesystem.
|
// CopyToContainer copies content into the container filesystem.
|
||||||
// Note that `content` must be a Reader for a TAR archive
|
// Note that `content` must be a Reader for a TAR archive
|
||||||
func (cli *Client) CopyToContainer(ctx context.Context, containerID, dstPath string, content io.Reader, options types.CopyToContainerOptions) error {
|
func (cli *Client) CopyToContainer(ctx context.Context, containerID, dstPath string, content io.Reader, options container.CopyToContainerOptions) error {
|
||||||
query := url.Values{}
|
query := url.Values{}
|
||||||
query.Set("path", filepath.ToSlash(dstPath)) // Normalize the paths used in the API.
|
query.Set("path", filepath.ToSlash(dstPath)) // Normalize the paths used in the API.
|
||||||
// Do not allow for an existing directory to be overwritten by a non-directory and vice versa.
|
// Do not allow for an existing directory to be overwritten by a non-directory and vice versa.
|
||||||
|
@ -55,14 +55,14 @@ func (cli *Client) CopyToContainer(ctx context.Context, containerID, dstPath str
|
||||||
|
|
||||||
// CopyFromContainer gets the content from the container and returns it as a Reader
|
// CopyFromContainer gets the content from the container and returns it as a Reader
|
||||||
// for a TAR archive to manipulate it in the host. It's up to the caller to close the reader.
|
// for a TAR archive to manipulate it in the host. It's up to the caller to close the reader.
|
||||||
func (cli *Client) CopyFromContainer(ctx context.Context, containerID, srcPath string) (io.ReadCloser, types.ContainerPathStat, error) {
|
func (cli *Client) CopyFromContainer(ctx context.Context, containerID, srcPath string) (io.ReadCloser, container.PathStat, error) {
|
||||||
query := make(url.Values, 1)
|
query := make(url.Values, 1)
|
||||||
query.Set("path", filepath.ToSlash(srcPath)) // Normalize the paths used in the API.
|
query.Set("path", filepath.ToSlash(srcPath)) // Normalize the paths used in the API.
|
||||||
|
|
||||||
apiPath := "/containers/" + containerID + "/archive"
|
apiPath := "/containers/" + containerID + "/archive"
|
||||||
response, err := cli.get(ctx, apiPath, query, nil)
|
response, err := cli.get(ctx, apiPath, query, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, types.ContainerPathStat{}, err
|
return nil, container.PathStat{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// In order to get the copy behavior right, we need to know information
|
// In order to get the copy behavior right, we need to know information
|
||||||
|
@ -78,8 +78,8 @@ func (cli *Client) CopyFromContainer(ctx context.Context, containerID, srcPath s
|
||||||
return response.body, stat, err
|
return response.body, stat, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func getContainerPathStatFromHeader(header http.Header) (types.ContainerPathStat, error) {
|
func getContainerPathStatFromHeader(header http.Header) (container.PathStat, error) {
|
||||||
var stat types.ContainerPathStat
|
var stat container.PathStat
|
||||||
|
|
||||||
encodedStat := header.Get("X-Docker-Container-Path-Stat")
|
encodedStat := header.Get("X-Docker-Container-Path-Stat")
|
||||||
statDecoder := base64.NewDecoder(base64.StdEncoding, strings.NewReader(encodedStat))
|
statDecoder := base64.NewDecoder(base64.StdEncoding, strings.NewReader(encodedStat))
|
||||||
|
|
|
@ -6,11 +6,12 @@ import (
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"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/versions"
|
"github.com/docker/docker/api/types/versions"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ContainerExecCreate creates a new exec configuration to run an exec process.
|
// ContainerExecCreate creates a new exec configuration to run an exec process.
|
||||||
func (cli *Client) ContainerExecCreate(ctx context.Context, container string, config types.ExecConfig) (types.IDResponse, error) {
|
func (cli *Client) ContainerExecCreate(ctx context.Context, container string, options container.ExecOptions) (types.IDResponse, error) {
|
||||||
var response types.IDResponse
|
var response types.IDResponse
|
||||||
|
|
||||||
// Make sure we negotiated (if the client is configured to do so),
|
// Make sure we negotiated (if the client is configured to do so),
|
||||||
|
@ -22,14 +23,14 @@ func (cli *Client) ContainerExecCreate(ctx context.Context, container string, co
|
||||||
return response, err
|
return response, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := cli.NewVersionError(ctx, "1.25", "env"); len(config.Env) != 0 && err != nil {
|
if err := cli.NewVersionError(ctx, "1.25", "env"); len(options.Env) != 0 && err != nil {
|
||||||
return response, err
|
return response, err
|
||||||
}
|
}
|
||||||
if versions.LessThan(cli.ClientVersion(), "1.42") {
|
if versions.LessThan(cli.ClientVersion(), "1.42") {
|
||||||
config.ConsoleSize = nil
|
options.ConsoleSize = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
resp, err := cli.post(ctx, "/containers/"+container+"/exec", nil, config, nil)
|
resp, err := cli.post(ctx, "/containers/"+container+"/exec", nil, options, nil)
|
||||||
defer ensureReaderClosed(resp)
|
defer ensureReaderClosed(resp)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return response, err
|
return response, err
|
||||||
|
@ -39,7 +40,7 @@ func (cli *Client) ContainerExecCreate(ctx context.Context, container string, co
|
||||||
}
|
}
|
||||||
|
|
||||||
// ContainerExecStart starts an exec process already created in the docker host.
|
// ContainerExecStart starts an exec process already created in the docker host.
|
||||||
func (cli *Client) ContainerExecStart(ctx context.Context, execID string, config types.ExecStartCheck) error {
|
func (cli *Client) ContainerExecStart(ctx context.Context, execID string, config container.ExecStartOptions) error {
|
||||||
if versions.LessThan(cli.ClientVersion(), "1.42") {
|
if versions.LessThan(cli.ClientVersion(), "1.42") {
|
||||||
config.ConsoleSize = nil
|
config.ConsoleSize = nil
|
||||||
}
|
}
|
||||||
|
@ -52,7 +53,7 @@ func (cli *Client) ContainerExecStart(ctx context.Context, execID string, config
|
||||||
// It returns a types.HijackedConnection with the hijacked connection
|
// It returns a types.HijackedConnection with the hijacked connection
|
||||||
// and the a reader to get output. It's up to the called to close
|
// and the a reader to get output. It's up to the called to close
|
||||||
// the hijacked connection by calling types.HijackedResponse.Close.
|
// the hijacked connection by calling types.HijackedResponse.Close.
|
||||||
func (cli *Client) ContainerExecAttach(ctx context.Context, execID string, config types.ExecStartCheck) (types.HijackedResponse, error) {
|
func (cli *Client) ContainerExecAttach(ctx context.Context, execID string, config container.ExecAttachOptions) (types.HijackedResponse, error) {
|
||||||
if versions.LessThan(cli.ClientVersion(), "1.42") {
|
if versions.LessThan(cli.ClientVersion(), "1.42") {
|
||||||
config.ConsoleSize = nil
|
config.ConsoleSize = nil
|
||||||
}
|
}
|
||||||
|
@ -62,8 +63,8 @@ func (cli *Client) ContainerExecAttach(ctx context.Context, execID string, confi
|
||||||
}
|
}
|
||||||
|
|
||||||
// ContainerExecInspect returns information about a specific exec process on the docker host.
|
// ContainerExecInspect returns information about a specific exec process on the docker host.
|
||||||
func (cli *Client) ContainerExecInspect(ctx context.Context, execID string) (types.ContainerExecInspect, error) {
|
func (cli *Client) ContainerExecInspect(ctx context.Context, execID string) (container.ExecInspect, error) {
|
||||||
var response types.ContainerExecInspect
|
var response container.ExecInspect
|
||||||
resp, err := cli.get(ctx, "/exec/"+execID+"/json", nil, nil)
|
resp, err := cli.get(ctx, "/exec/"+execID+"/json", nil, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return response, err
|
return response, err
|
||||||
|
|
|
@ -5,13 +5,13 @@ import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/docker/docker/api/types"
|
"github.com/docker/docker/api/types/container"
|
||||||
"github.com/docker/docker/api/types/filters"
|
"github.com/docker/docker/api/types/filters"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ContainersPrune requests the daemon to delete unused data
|
// ContainersPrune requests the daemon to delete unused data
|
||||||
func (cli *Client) ContainersPrune(ctx context.Context, pruneFilters filters.Args) (types.ContainersPruneReport, error) {
|
func (cli *Client) ContainersPrune(ctx context.Context, pruneFilters filters.Args) (container.PruneReport, error) {
|
||||||
var report types.ContainersPruneReport
|
var report container.PruneReport
|
||||||
|
|
||||||
if err := cli.NewVersionError(ctx, "1.25", "container prune"); err != nil {
|
if err := cli.NewVersionError(ctx, "1.25", "container prune"); err != nil {
|
||||||
return report, err
|
return report, err
|
||||||
|
|
|
@ -4,12 +4,12 @@ import (
|
||||||
"context"
|
"context"
|
||||||
"net/url"
|
"net/url"
|
||||||
|
|
||||||
"github.com/docker/docker/api/types"
|
"github.com/docker/docker/api/types/container"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ContainerStats returns near realtime stats for a given container.
|
// ContainerStats returns near realtime stats for a given container.
|
||||||
// It's up to the caller to close the io.ReadCloser returned.
|
// It's up to the caller to close the io.ReadCloser returned.
|
||||||
func (cli *Client) ContainerStats(ctx context.Context, containerID string, stream bool) (types.ContainerStats, error) {
|
func (cli *Client) ContainerStats(ctx context.Context, containerID string, stream bool) (container.StatsResponse, error) {
|
||||||
query := url.Values{}
|
query := url.Values{}
|
||||||
query.Set("stream", "0")
|
query.Set("stream", "0")
|
||||||
if stream {
|
if stream {
|
||||||
|
@ -18,10 +18,10 @@ func (cli *Client) ContainerStats(ctx context.Context, containerID string, strea
|
||||||
|
|
||||||
resp, err := cli.get(ctx, "/containers/"+containerID+"/stats", query, nil)
|
resp, err := cli.get(ctx, "/containers/"+containerID+"/stats", query, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return types.ContainerStats{}, err
|
return container.StatsResponse{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return types.ContainerStats{
|
return container.StatsResponse{
|
||||||
Body: resp.body,
|
Body: resp.body,
|
||||||
OSType: getDockerOS(resp.header.Get("Server")),
|
OSType: getDockerOS(resp.header.Get("Server")),
|
||||||
}, nil
|
}, nil
|
||||||
|
@ -29,17 +29,17 @@ func (cli *Client) ContainerStats(ctx context.Context, containerID string, strea
|
||||||
|
|
||||||
// ContainerStatsOneShot gets a single stat entry from a container.
|
// ContainerStatsOneShot gets a single stat entry from a container.
|
||||||
// It differs from `ContainerStats` in that the API should not wait to prime the stats
|
// It differs from `ContainerStats` in that the API should not wait to prime the stats
|
||||||
func (cli *Client) ContainerStatsOneShot(ctx context.Context, containerID string) (types.ContainerStats, error) {
|
func (cli *Client) ContainerStatsOneShot(ctx context.Context, containerID string) (container.StatsResponse, error) {
|
||||||
query := url.Values{}
|
query := url.Values{}
|
||||||
query.Set("stream", "0")
|
query.Set("stream", "0")
|
||||||
query.Set("one-shot", "1")
|
query.Set("one-shot", "1")
|
||||||
|
|
||||||
resp, err := cli.get(ctx, "/containers/"+containerID+"/stats", query, nil)
|
resp, err := cli.get(ctx, "/containers/"+containerID+"/stats", query, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return types.ContainerStats{}, err
|
return container.StatsResponse{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return types.ContainerStats{
|
return container.StatsResponse{
|
||||||
Body: resp.body,
|
Body: resp.body,
|
||||||
OSType: getDockerOS(resp.header.Get("Server")),
|
OSType: getDockerOS(resp.header.Get("Server")),
|
||||||
}, nil
|
}, nil
|
||||||
|
|
|
@ -6,7 +6,6 @@ import (
|
||||||
"net/url"
|
"net/url"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/docker/docker/api/types"
|
|
||||||
"github.com/docker/docker/api/types/events"
|
"github.com/docker/docker/api/types/events"
|
||||||
"github.com/docker/docker/api/types/filters"
|
"github.com/docker/docker/api/types/filters"
|
||||||
timetypes "github.com/docker/docker/api/types/time"
|
timetypes "github.com/docker/docker/api/types/time"
|
||||||
|
@ -16,7 +15,7 @@ import (
|
||||||
// by cancelling the context. Once the stream has been completely read an io.EOF error will
|
// by cancelling the context. Once the stream has been completely read an io.EOF error will
|
||||||
// be sent over the error channel. If an error is sent all processing will be stopped. It's up
|
// be sent over the error channel. If an error is sent all processing will be stopped. It's up
|
||||||
// to the caller to reopen the stream in the event of an error by reinvoking this method.
|
// to the caller to reopen the stream in the event of an error by reinvoking this method.
|
||||||
func (cli *Client) Events(ctx context.Context, options types.EventsOptions) (<-chan events.Message, <-chan error) {
|
func (cli *Client) Events(ctx context.Context, options events.ListOptions) (<-chan events.Message, <-chan error) {
|
||||||
messages := make(chan events.Message)
|
messages := make(chan events.Message)
|
||||||
errs := make(chan error, 1)
|
errs := make(chan error, 1)
|
||||||
|
|
||||||
|
@ -68,7 +67,7 @@ func (cli *Client) Events(ctx context.Context, options types.EventsOptions) (<-c
|
||||||
return messages, errs
|
return messages, errs
|
||||||
}
|
}
|
||||||
|
|
||||||
func buildEventsQueryParams(cliVersion string, options types.EventsOptions) (url.Values, error) {
|
func buildEventsQueryParams(cliVersion string, options events.ListOptions) (url.Values, error) {
|
||||||
query := url.Values{}
|
query := url.Values{}
|
||||||
ref := time.Now()
|
ref := time.Now()
|
||||||
|
|
||||||
|
|
|
@ -7,13 +7,12 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/distribution/reference"
|
"github.com/distribution/reference"
|
||||||
"github.com/docker/docker/api/types"
|
|
||||||
"github.com/docker/docker/api/types/image"
|
"github.com/docker/docker/api/types/image"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ImageImport creates a new image based on the source options.
|
// ImageImport creates a new image based on the source options.
|
||||||
// It returns the JSON content in the response body.
|
// It returns the JSON content in the response body.
|
||||||
func (cli *Client) ImageImport(ctx context.Context, source types.ImageImportSource, ref string, options image.ImportOptions) (io.ReadCloser, error) {
|
func (cli *Client) ImageImport(ctx context.Context, source image.ImportSource, ref string, options image.ImportOptions) (io.ReadCloser, error) {
|
||||||
if ref != "" {
|
if ref != "" {
|
||||||
// Check if the given image name can be resolved
|
// Check if the given image name can be resolved
|
||||||
if _, err := reference.ParseNormalizedNamed(ref); err != nil {
|
if _, err := reference.ParseNormalizedNamed(ref); err != nil {
|
||||||
|
|
|
@ -6,13 +6,13 @@ import (
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
|
|
||||||
"github.com/docker/docker/api/types"
|
"github.com/docker/docker/api/types/image"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ImageLoad loads an image in the docker host from the client host.
|
// ImageLoad loads an image in the docker host from the client host.
|
||||||
// It's up to the caller to close the io.ReadCloser in the
|
// It's up to the caller to close the io.ReadCloser in the
|
||||||
// ImageLoadResponse returned by this function.
|
// ImageLoadResponse returned by this function.
|
||||||
func (cli *Client) ImageLoad(ctx context.Context, input io.Reader, quiet bool) (types.ImageLoadResponse, error) {
|
func (cli *Client) ImageLoad(ctx context.Context, input io.Reader, quiet bool) (image.LoadResponse, error) {
|
||||||
v := url.Values{}
|
v := url.Values{}
|
||||||
v.Set("quiet", "0")
|
v.Set("quiet", "0")
|
||||||
if quiet {
|
if quiet {
|
||||||
|
@ -22,9 +22,9 @@ func (cli *Client) ImageLoad(ctx context.Context, input io.Reader, quiet bool) (
|
||||||
"Content-Type": {"application/x-tar"},
|
"Content-Type": {"application/x-tar"},
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return types.ImageLoadResponse{}, err
|
return image.LoadResponse{}, err
|
||||||
}
|
}
|
||||||
return types.ImageLoadResponse{
|
return image.LoadResponse{
|
||||||
Body: resp.body,
|
Body: resp.body,
|
||||||
JSON: resp.header.Get("Content-Type") == "application/json",
|
JSON: resp.header.Get("Content-Type") == "application/json",
|
||||||
}, nil
|
}, nil
|
||||||
|
|
|
@ -5,13 +5,13 @@ import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/docker/docker/api/types"
|
|
||||||
"github.com/docker/docker/api/types/filters"
|
"github.com/docker/docker/api/types/filters"
|
||||||
|
"github.com/docker/docker/api/types/image"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ImagesPrune requests the daemon to delete unused data
|
// ImagesPrune requests the daemon to delete unused data
|
||||||
func (cli *Client) ImagesPrune(ctx context.Context, pruneFilters filters.Args) (types.ImagesPruneReport, error) {
|
func (cli *Client) ImagesPrune(ctx context.Context, pruneFilters filters.Args) (image.PruneReport, error) {
|
||||||
var report types.ImagesPruneReport
|
var report image.PruneReport
|
||||||
|
|
||||||
if err := cli.NewVersionError(ctx, "1.25", "image prune"); err != nil {
|
if err := cli.NewVersionError(ctx, "1.25", "image prune"); err != nil {
|
||||||
return report, err
|
return report, err
|
||||||
|
|
|
@ -7,7 +7,6 @@ import (
|
||||||
"net/url"
|
"net/url"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
"github.com/docker/docker/api/types"
|
|
||||||
"github.com/docker/docker/api/types/filters"
|
"github.com/docker/docker/api/types/filters"
|
||||||
"github.com/docker/docker/api/types/registry"
|
"github.com/docker/docker/api/types/registry"
|
||||||
"github.com/docker/docker/errdefs"
|
"github.com/docker/docker/errdefs"
|
||||||
|
@ -15,7 +14,7 @@ import (
|
||||||
|
|
||||||
// ImageSearch makes the docker host search by a term in a remote registry.
|
// ImageSearch makes the docker host search by a term in a remote registry.
|
||||||
// The list of results is not sorted in any fashion.
|
// The list of results is not sorted in any fashion.
|
||||||
func (cli *Client) ImageSearch(ctx context.Context, term string, options types.ImageSearchOptions) ([]registry.SearchResult, error) {
|
func (cli *Client) ImageSearch(ctx context.Context, term string, options registry.SearchOptions) ([]registry.SearchResult, error) {
|
||||||
var results []registry.SearchResult
|
var results []registry.SearchResult
|
||||||
query := url.Values{}
|
query := url.Values{}
|
||||||
query.Set("term", term)
|
query.Set("term", term)
|
||||||
|
|
|
@ -50,11 +50,11 @@ type ContainerAPIClient interface {
|
||||||
ContainerCommit(ctx context.Context, container string, options container.CommitOptions) (types.IDResponse, error)
|
ContainerCommit(ctx context.Context, container string, options container.CommitOptions) (types.IDResponse, error)
|
||||||
ContainerCreate(ctx context.Context, config *container.Config, hostConfig *container.HostConfig, networkingConfig *network.NetworkingConfig, platform *ocispec.Platform, containerName string) (container.CreateResponse, error)
|
ContainerCreate(ctx context.Context, config *container.Config, hostConfig *container.HostConfig, networkingConfig *network.NetworkingConfig, platform *ocispec.Platform, containerName string) (container.CreateResponse, error)
|
||||||
ContainerDiff(ctx context.Context, container string) ([]container.FilesystemChange, error)
|
ContainerDiff(ctx context.Context, container string) ([]container.FilesystemChange, error)
|
||||||
ContainerExecAttach(ctx context.Context, execID string, config types.ExecStartCheck) (types.HijackedResponse, error)
|
ContainerExecAttach(ctx context.Context, execID string, options container.ExecAttachOptions) (types.HijackedResponse, error)
|
||||||
ContainerExecCreate(ctx context.Context, container string, config types.ExecConfig) (types.IDResponse, error)
|
ContainerExecCreate(ctx context.Context, container string, options container.ExecOptions) (types.IDResponse, error)
|
||||||
ContainerExecInspect(ctx context.Context, execID string) (types.ContainerExecInspect, error)
|
ContainerExecInspect(ctx context.Context, execID string) (container.ExecInspect, error)
|
||||||
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, config types.ExecStartCheck) 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) (types.ContainerJSON, error)
|
||||||
ContainerInspectWithRaw(ctx context.Context, container string, getSize bool) (types.ContainerJSON, []byte, error)
|
ContainerInspectWithRaw(ctx context.Context, container string, getSize bool) (types.ContainerJSON, []byte, error)
|
||||||
|
@ -66,18 +66,18 @@ type ContainerAPIClient interface {
|
||||||
ContainerRename(ctx context.Context, container, newContainerName string) error
|
ContainerRename(ctx context.Context, container, newContainerName string) error
|
||||||
ContainerResize(ctx context.Context, container string, options container.ResizeOptions) error
|
ContainerResize(ctx context.Context, container string, options container.ResizeOptions) error
|
||||||
ContainerRestart(ctx context.Context, container string, options container.StopOptions) error
|
ContainerRestart(ctx context.Context, container string, options container.StopOptions) error
|
||||||
ContainerStatPath(ctx context.Context, container, path string) (types.ContainerPathStat, error)
|
ContainerStatPath(ctx context.Context, container, path string) (container.PathStat, error)
|
||||||
ContainerStats(ctx context.Context, container string, stream bool) (types.ContainerStats, error)
|
ContainerStats(ctx context.Context, container string, stream bool) (container.StatsResponse, error)
|
||||||
ContainerStatsOneShot(ctx context.Context, container string) (types.ContainerStats, error)
|
ContainerStatsOneShot(ctx context.Context, container string) (container.StatsResponse, error)
|
||||||
ContainerStart(ctx context.Context, container string, options container.StartOptions) error
|
ContainerStart(ctx context.Context, container string, options container.StartOptions) error
|
||||||
ContainerStop(ctx context.Context, container string, options container.StopOptions) error
|
ContainerStop(ctx context.Context, container string, options container.StopOptions) error
|
||||||
ContainerTop(ctx context.Context, container string, arguments []string) (container.ContainerTopOKBody, error)
|
ContainerTop(ctx context.Context, container string, arguments []string) (container.ContainerTopOKBody, error)
|
||||||
ContainerUnpause(ctx context.Context, container string) error
|
ContainerUnpause(ctx context.Context, container string) error
|
||||||
ContainerUpdate(ctx context.Context, container string, updateConfig container.UpdateConfig) (container.ContainerUpdateOKBody, error)
|
ContainerUpdate(ctx context.Context, container string, updateConfig container.UpdateConfig) (container.ContainerUpdateOKBody, error)
|
||||||
ContainerWait(ctx context.Context, container string, condition container.WaitCondition) (<-chan container.WaitResponse, <-chan error)
|
ContainerWait(ctx context.Context, container string, condition container.WaitCondition) (<-chan container.WaitResponse, <-chan error)
|
||||||
CopyFromContainer(ctx context.Context, container, srcPath string) (io.ReadCloser, types.ContainerPathStat, error)
|
CopyFromContainer(ctx context.Context, container, srcPath string) (io.ReadCloser, container.PathStat, error)
|
||||||
CopyToContainer(ctx context.Context, container, path string, content io.Reader, options types.CopyToContainerOptions) error
|
CopyToContainer(ctx context.Context, container, path string, content io.Reader, options container.CopyToContainerOptions) error
|
||||||
ContainersPrune(ctx context.Context, pruneFilters filters.Args) (types.ContainersPruneReport, error)
|
ContainersPrune(ctx context.Context, pruneFilters filters.Args) (container.PruneReport, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
// DistributionAPIClient defines API client methods for the registry
|
// DistributionAPIClient defines API client methods for the registry
|
||||||
|
@ -92,17 +92,17 @@ type ImageAPIClient interface {
|
||||||
BuildCancel(ctx context.Context, id string) error
|
BuildCancel(ctx context.Context, id string) error
|
||||||
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 types.ImageImportSource, 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) (types.ImageInspect, []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) (types.ImageLoadResponse, 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)
|
||||||
ImagePush(ctx context.Context, ref string, options image.PushOptions) (io.ReadCloser, error)
|
ImagePush(ctx context.Context, ref string, options image.PushOptions) (io.ReadCloser, error)
|
||||||
ImageRemove(ctx context.Context, image string, options image.RemoveOptions) ([]image.DeleteResponse, error)
|
ImageRemove(ctx context.Context, image string, options image.RemoveOptions) ([]image.DeleteResponse, error)
|
||||||
ImageSearch(ctx context.Context, term string, options types.ImageSearchOptions) ([]registry.SearchResult, error)
|
ImageSearch(ctx context.Context, term string, options registry.SearchOptions) ([]registry.SearchResult, error)
|
||||||
ImageSave(ctx context.Context, images []string) (io.ReadCloser, error)
|
ImageSave(ctx context.Context, images []string) (io.ReadCloser, error)
|
||||||
ImageTag(ctx context.Context, image, ref string) error
|
ImageTag(ctx context.Context, image, ref string) error
|
||||||
ImagesPrune(ctx context.Context, pruneFilter filters.Args) (types.ImagesPruneReport, error)
|
ImagesPrune(ctx context.Context, pruneFilter filters.Args) (image.PruneReport, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
// NetworkAPIClient defines API client methods for the networks
|
// NetworkAPIClient defines API client methods for the networks
|
||||||
|
@ -165,7 +165,7 @@ type SwarmAPIClient interface {
|
||||||
|
|
||||||
// SystemAPIClient defines API client methods for the system
|
// SystemAPIClient defines API client methods for the system
|
||||||
type SystemAPIClient interface {
|
type SystemAPIClient interface {
|
||||||
Events(ctx context.Context, options types.EventsOptions) (<-chan events.Message, <-chan error)
|
Events(ctx context.Context, options events.ListOptions) (<-chan events.Message, <-chan error)
|
||||||
Info(ctx context.Context) (system.Info, error)
|
Info(ctx context.Context) (system.Info, error)
|
||||||
RegistryLogin(ctx context.Context, auth registry.AuthConfig) (registry.AuthenticateOKBody, error)
|
RegistryLogin(ctx context.Context, auth registry.AuthConfig) (registry.AuthenticateOKBody, error)
|
||||||
DiskUsage(ctx context.Context, options types.DiskUsageOptions) (types.DiskUsage, error)
|
DiskUsage(ctx context.Context, options types.DiskUsageOptions) (types.DiskUsage, error)
|
||||||
|
@ -179,7 +179,7 @@ type VolumeAPIClient interface {
|
||||||
VolumeInspectWithRaw(ctx context.Context, volumeID string) (volume.Volume, []byte, error)
|
VolumeInspectWithRaw(ctx context.Context, volumeID string) (volume.Volume, []byte, error)
|
||||||
VolumeList(ctx context.Context, options volume.ListOptions) (volume.ListResponse, error)
|
VolumeList(ctx context.Context, options volume.ListOptions) (volume.ListResponse, error)
|
||||||
VolumeRemove(ctx context.Context, volumeID string, force bool) error
|
VolumeRemove(ctx context.Context, volumeID string, force bool) error
|
||||||
VolumesPrune(ctx context.Context, pruneFilter filters.Args) (types.VolumesPruneReport, error)
|
VolumesPrune(ctx context.Context, pruneFilter filters.Args) (volume.PruneReport, error)
|
||||||
VolumeUpdate(ctx context.Context, volumeID string, version swarm.Version, options volume.UpdateOptions) error
|
VolumeUpdate(ctx context.Context, volumeID string, version swarm.Version, options volume.UpdateOptions) error
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,13 +5,13 @@ import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/docker/docker/api/types"
|
|
||||||
"github.com/docker/docker/api/types/filters"
|
"github.com/docker/docker/api/types/filters"
|
||||||
|
"github.com/docker/docker/api/types/volume"
|
||||||
)
|
)
|
||||||
|
|
||||||
// VolumesPrune requests the daemon to delete unused data
|
// VolumesPrune requests the daemon to delete unused data
|
||||||
func (cli *Client) VolumesPrune(ctx context.Context, pruneFilters filters.Args) (types.VolumesPruneReport, error) {
|
func (cli *Client) VolumesPrune(ctx context.Context, pruneFilters filters.Args) (volume.PruneReport, error) {
|
||||||
var report types.VolumesPruneReport
|
var report volume.PruneReport
|
||||||
|
|
||||||
if err := cli.NewVersionError(ctx, "1.25", "volume prune"); err != nil {
|
if err := cli.NewVersionError(ctx, "1.25", "volume prune"); err != nil {
|
||||||
return report, err
|
return report, 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 v26.1.1-0.20240607121412-59996a493cfc+incompatible
|
# github.com/docker/docker v26.1.1-0.20240610145149-a736d0701c41+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
|
||||||
|
|
Loading…
Reference in New Issue