Compare commits
45 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 38b7060a21 | |||
| 2d46d162c1 | |||
| f03fb6c40b | |||
| 5bb0d7f70c | |||
| 575d4af72f | |||
| 4b202b9e2b | |||
| 80d1959ee3 | |||
| 19a5c5c714 | |||
| c88268681e | |||
| 747cb4448f | |||
| 23fe9ec244 | |||
| 51025e12e5 | |||
| 9b83d5bbf9 | |||
| ab2d683f61 | |||
| 3664c08b73 | |||
| cccf6d8cc4 | |||
| 50da0ad9df | |||
| dbb5872b69 | |||
| e2632c5c4f | |||
| f53bb8882f | |||
| 4cb0695b49 | |||
| 3ce5130af6 | |||
| 99d4d1f386 | |||
| 398fa5aa70 | |||
| e225d51919 | |||
| 9cc2a2bf2d | |||
| 181563ee99 | |||
| 082d23d12d | |||
| 59e34093bc | |||
| a76643bca3 | |||
| f6985b7a27 | |||
| bab8478ef3 | |||
| 9f82d4a791 | |||
| 8b8f558b83 | |||
| 5487986681 | |||
| b9c563a581 | |||
| fe7fc2ff7f | |||
| 9e506545fd | |||
| 3c1bbfd82f | |||
| 0bfd4c9f29 | |||
| d8f09a1b75 | |||
| 473b248260 | |||
| b2d63d17af | |||
| e6534b4eb7 | |||
| 5c3128e95e |
1
.github/workflows/build.yml
vendored
1
.github/workflows/build.yml
vendored
@ -121,7 +121,6 @@ jobs:
|
||||
type=semver,pattern={{version}}
|
||||
type=ref,event=branch
|
||||
type=ref,event=pr
|
||||
type=sha
|
||||
-
|
||||
name: Build and push image
|
||||
uses: docker/bake-action@v6
|
||||
|
||||
2
.github/workflows/codeql.yml
vendored
2
.github/workflows/codeql.yml
vendored
@ -63,7 +63,7 @@ jobs:
|
||||
name: Update Go
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: "1.24.3"
|
||||
go-version: "1.24.4"
|
||||
-
|
||||
name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v3
|
||||
|
||||
2
.github/workflows/test.yml
vendored
2
.github/workflows/test.yml
vendored
@ -66,7 +66,7 @@ jobs:
|
||||
name: Set up Go
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: "1.24.3"
|
||||
go-version: "1.24.4"
|
||||
-
|
||||
name: Test
|
||||
run: |
|
||||
|
||||
@ -5,7 +5,7 @@ run:
|
||||
# which causes it to fallback to go1.17 semantics.
|
||||
#
|
||||
# TODO(thaJeztah): update "usetesting" settings to enable go1.24 features once our minimum version is go1.24
|
||||
go: "1.24.3"
|
||||
go: "1.24.4"
|
||||
|
||||
timeout: 5m
|
||||
|
||||
|
||||
@ -4,7 +4,7 @@ ARG BASE_VARIANT=alpine
|
||||
ARG ALPINE_VERSION=3.21
|
||||
ARG BASE_DEBIAN_DISTRO=bookworm
|
||||
|
||||
ARG GO_VERSION=1.24.3
|
||||
ARG GO_VERSION=1.24.4
|
||||
ARG XX_VERSION=1.6.1
|
||||
ARG GOVERSIONINFO_VERSION=v1.4.1
|
||||
ARG GOTESTSUM_VERSION=v1.12.0
|
||||
|
||||
@ -28,7 +28,7 @@ func NewContainerCommand(dockerCli command.Cli) *cobra.Command {
|
||||
NewPortCommand(dockerCli),
|
||||
NewRenameCommand(dockerCli),
|
||||
NewRestartCommand(dockerCli),
|
||||
NewRmCommand(dockerCli),
|
||||
newRemoveCommand(dockerCli),
|
||||
NewRunCommand(dockerCli),
|
||||
NewStartCommand(dockerCli),
|
||||
NewStatsCommand(dockerCli),
|
||||
|
||||
@ -99,7 +99,7 @@ func RunExec(ctx context.Context, dockerCLI command.Cli, containerIDorName strin
|
||||
if _, err := apiClient.ContainerInspect(ctx, containerIDorName); err != nil {
|
||||
return err
|
||||
}
|
||||
if !execOptions.Detach {
|
||||
if !options.Detach {
|
||||
if err := dockerCLI.In().CheckTty(execOptions.AttachStdin, execOptions.Tty); err != nil {
|
||||
return err
|
||||
}
|
||||
@ -117,9 +117,9 @@ func RunExec(ctx context.Context, dockerCLI command.Cli, containerIDorName strin
|
||||
return errors.New("exec ID empty")
|
||||
}
|
||||
|
||||
if execOptions.Detach {
|
||||
if options.Detach {
|
||||
return apiClient.ContainerExecStart(ctx, execID, container.ExecStartOptions{
|
||||
Detach: execOptions.Detach,
|
||||
Detach: options.Detach,
|
||||
Tty: execOptions.Tty,
|
||||
ConsoleSize: execOptions.ConsoleSize,
|
||||
})
|
||||
@ -223,7 +223,6 @@ func parseExec(execOpts ExecOptions, configFile *configfile.ConfigFile) (*contai
|
||||
Privileged: execOpts.Privileged,
|
||||
Tty: execOpts.TTY,
|
||||
Cmd: execOpts.Command,
|
||||
Detach: execOpts.Detach,
|
||||
WorkingDir: execOpts.Workdir,
|
||||
}
|
||||
|
||||
|
||||
@ -5,6 +5,7 @@ import (
|
||||
"errors"
|
||||
"io"
|
||||
"os"
|
||||
"strconv"
|
||||
"testing"
|
||||
|
||||
"github.com/docker/cli/cli"
|
||||
@ -75,8 +76,7 @@ TWO=2
|
||||
{
|
||||
options: withDefaultOpts(ExecOptions{Detach: true}),
|
||||
expected: container.ExecOptions{
|
||||
Detach: true,
|
||||
Cmd: []string{"command"},
|
||||
Cmd: []string{"command"},
|
||||
},
|
||||
},
|
||||
{
|
||||
@ -86,9 +86,8 @@ TWO=2
|
||||
Detach: true,
|
||||
}),
|
||||
expected: container.ExecOptions{
|
||||
Detach: true,
|
||||
Tty: true,
|
||||
Cmd: []string{"command"},
|
||||
Tty: true,
|
||||
Cmd: []string{"command"},
|
||||
},
|
||||
},
|
||||
{
|
||||
@ -97,7 +96,6 @@ TWO=2
|
||||
expected: container.ExecOptions{
|
||||
Cmd: []string{"command"},
|
||||
DetachKeys: "de",
|
||||
Detach: true,
|
||||
},
|
||||
},
|
||||
{
|
||||
@ -109,7 +107,6 @@ TWO=2
|
||||
expected: container.ExecOptions{
|
||||
Cmd: []string{"command"},
|
||||
DetachKeys: "ab",
|
||||
Detach: true,
|
||||
},
|
||||
},
|
||||
{
|
||||
@ -141,10 +138,12 @@ TWO=2
|
||||
},
|
||||
}
|
||||
|
||||
for _, testcase := range testcases {
|
||||
execConfig, err := parseExec(testcase.options, &testcase.configFile)
|
||||
assert.NilError(t, err)
|
||||
assert.Check(t, is.DeepEqual(testcase.expected, *execConfig))
|
||||
for i, testcase := range testcases {
|
||||
t.Run("test "+strconv.Itoa(i+1), func(t *testing.T) {
|
||||
execConfig, err := parseExec(testcase.options, &testcase.configFile)
|
||||
assert.NilError(t, err)
|
||||
assert.Check(t, is.DeepEqual(testcase.expected, *execConfig))
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -27,10 +27,9 @@ func NewRmCommand(dockerCli command.Cli) *cobra.Command {
|
||||
var opts rmOptions
|
||||
|
||||
cmd := &cobra.Command{
|
||||
Use: "rm [OPTIONS] CONTAINER [CONTAINER...]",
|
||||
Aliases: []string{"remove"},
|
||||
Short: "Remove one or more containers",
|
||||
Args: cli.RequiresMinArgs(1),
|
||||
Use: "rm [OPTIONS] CONTAINER [CONTAINER...]",
|
||||
Short: "Remove one or more containers",
|
||||
Args: cli.RequiresMinArgs(1),
|
||||
RunE: func(cmd *cobra.Command, args []string) error {
|
||||
opts.containers = args
|
||||
return runRm(cmd.Context(), dockerCli, &opts)
|
||||
@ -50,6 +49,15 @@ func NewRmCommand(dockerCli command.Cli) *cobra.Command {
|
||||
return cmd
|
||||
}
|
||||
|
||||
// newRemoveCommand adds subcommands for "docker container"; unlike the
|
||||
// top-level "docker rm", it also adds a "remove" alias to support
|
||||
// "docker container remove" in addition to "docker container rm".
|
||||
func newRemoveCommand(dockerCli command.Cli) *cobra.Command {
|
||||
cmd := *NewRmCommand(dockerCli)
|
||||
cmd.Aliases = []string{"rm", "remove"}
|
||||
return &cmd
|
||||
}
|
||||
|
||||
func runRm(ctx context.Context, dockerCLI command.Cli, opts *rmOptions) error {
|
||||
apiClient := dockerCLI.Client()
|
||||
errChan := parallelOperation(ctx, opts.containers, func(ctx context.Context, ctrID string) error {
|
||||
|
||||
@ -75,8 +75,8 @@ func legacyWaitExitOrRemoved(ctx context.Context, apiClient client.APIClient, co
|
||||
|
||||
eventProcessor := func(e events.Message) bool {
|
||||
stopProcessing := false
|
||||
switch e.Status {
|
||||
case "die":
|
||||
switch e.Action { //nolint:exhaustive // TODO(thaJeztah): make exhaustive
|
||||
case events.ActionDie:
|
||||
if v, ok := e.Actor.Attributes["exitCode"]; ok {
|
||||
code, cerr := strconv.Atoi(v)
|
||||
if cerr != nil {
|
||||
@ -98,10 +98,10 @@ func legacyWaitExitOrRemoved(ctx context.Context, apiClient client.APIClient, co
|
||||
}
|
||||
}()
|
||||
}
|
||||
case "detach":
|
||||
case events.ActionDetach:
|
||||
exitCode = 0
|
||||
stopProcessing = true
|
||||
case "destroy":
|
||||
case events.ActionDestroy:
|
||||
stopProcessing = true
|
||||
}
|
||||
return stopProcessing
|
||||
|
||||
@ -74,6 +74,8 @@ Image index won't be pushed, meaning that other manifests, including attestation
|
||||
}
|
||||
|
||||
// runPush performs a push against the engine based on the specified options.
|
||||
//
|
||||
//nolint:gocyclo // ignore cyclomatic complexity 17 of func `runPush` is high (> 16) for now.
|
||||
func runPush(ctx context.Context, dockerCli command.Cli, opts pushOptions) error {
|
||||
var platform *ocispec.Platform
|
||||
out := tui.NewOutput(dockerCli.Out())
|
||||
@ -113,7 +115,10 @@ To push the complete multi-platform image, remove the --platform flag.
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
requestPrivilege := command.RegistryAuthenticationPrivilegedFunc(dockerCli, repoInfo.Index, "push")
|
||||
var requestPrivilege registrytypes.RequestAuthConfig
|
||||
if dockerCli.In().IsTerminal() {
|
||||
requestPrivilege = command.RegistryAuthenticationPrivilegedFunc(dockerCli, repoInfo.Index, "push")
|
||||
}
|
||||
options := image.PushOptions{
|
||||
All: opts.all,
|
||||
RegistryAuth: encodedAuth,
|
||||
|
||||
@ -170,10 +170,16 @@ func getPossibleChips(view treeView) (chips []imageChip) {
|
||||
|
||||
var possible []imageChip
|
||||
for _, img := range view.images {
|
||||
details := []imageDetails{img.Details}
|
||||
|
||||
for _, c := range img.Children {
|
||||
details = append(details, c.Details)
|
||||
}
|
||||
|
||||
for _, d := range details {
|
||||
for idx := len(remaining) - 1; idx >= 0; idx-- {
|
||||
chip := remaining[idx]
|
||||
if chip.check(&c.Details) {
|
||||
if chip.check(&d) {
|
||||
possible = append(possible, chip)
|
||||
remaining = append(remaining[:idx], remaining[idx+1:]...)
|
||||
}
|
||||
|
||||
@ -149,7 +149,10 @@ func imagePullPrivileged(ctx context.Context, cli command.Cli, imgRefAndAuth tru
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
requestPrivilege := command.RegistryAuthenticationPrivilegedFunc(cli, imgRefAndAuth.RepoInfo().Index, "pull")
|
||||
var requestPrivilege registrytypes.RequestAuthConfig
|
||||
if cli.In().IsTerminal() {
|
||||
requestPrivilege = command.RegistryAuthenticationPrivilegedFunc(cli, imgRefAndAuth.RepoInfo().Index, "pull")
|
||||
}
|
||||
responseBody, err := cli.Client().ImagePull(ctx, reference.FamiliarString(imgRefAndAuth.Reference()), image.PullOptions{
|
||||
RegistryAuth: encodedAuth,
|
||||
PrivilegeFunc: requestPrivilege,
|
||||
|
||||
@ -90,13 +90,18 @@ func buildPullConfig(ctx context.Context, dockerCli command.Cli, opts pluginOpti
|
||||
return types.PluginInstallOptions{}, err
|
||||
}
|
||||
|
||||
var requestPrivilege registrytypes.RequestAuthConfig
|
||||
if dockerCli.In().IsTerminal() {
|
||||
requestPrivilege = command.RegistryAuthenticationPrivilegedFunc(dockerCli, repoInfo.Index, cmdName)
|
||||
}
|
||||
|
||||
options := types.PluginInstallOptions{
|
||||
RegistryAuth: encodedAuth,
|
||||
RemoteRef: remote,
|
||||
Disabled: opts.disable,
|
||||
AcceptAllPermissions: opts.grantPerms,
|
||||
AcceptPermissionsFunc: acceptPrivileges(dockerCli, opts.remote),
|
||||
PrivilegeFunc: command.RegistryAuthenticationPrivilegedFunc(dockerCli, repoInfo.Index, cmdName),
|
||||
PrivilegeFunc: requestPrivilege,
|
||||
Args: opts.args,
|
||||
}
|
||||
return options, nil
|
||||
|
||||
@ -35,7 +35,7 @@ const (
|
||||
const authConfigKey = "https://index.docker.io/v1/"
|
||||
|
||||
// RegistryAuthenticationPrivilegedFunc returns a RequestPrivilegeFunc from the specified registry index info
|
||||
// for the given command.
|
||||
// for the given command to prompt the user for username and password.
|
||||
func RegistryAuthenticationPrivilegedFunc(cli Cli, index *registrytypes.IndexInfo, cmdName string) registrytypes.RequestAuthConfig {
|
||||
configKey := getAuthConfigKey(index.Name)
|
||||
isDefaultRegistry := configKey == authConfigKey || index.Official
|
||||
@ -43,7 +43,7 @@ func RegistryAuthenticationPrivilegedFunc(cli Cli, index *registrytypes.IndexInf
|
||||
_, _ = fmt.Fprintf(cli.Out(), "\nLogin prior to %s:\n", cmdName)
|
||||
authConfig, err := GetDefaultAuthConfig(cli.ConfigFile(), true, configKey, isDefaultRegistry)
|
||||
if err != nil {
|
||||
_, _ = fmt.Fprintf(cli.Err(), "Unable to retrieve stored credentials for %s, error: %s.\n", authConfigKey, err)
|
||||
_, _ = fmt.Fprintf(cli.Err(), "Unable to retrieve stored credentials for %s, error: %s.\n", configKey, err)
|
||||
}
|
||||
|
||||
select {
|
||||
@ -52,7 +52,7 @@ func RegistryAuthenticationPrivilegedFunc(cli Cli, index *registrytypes.IndexInf
|
||||
default:
|
||||
}
|
||||
|
||||
authConfig, err = PromptUserForCredentials(ctx, cli, "", "", authConfig.Username, authConfigKey)
|
||||
authConfig, err = PromptUserForCredentials(ctx, cli, "", "", authConfig.Username, configKey)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
@ -63,7 +63,10 @@ func runSearch(ctx context.Context, dockerCli command.Cli, options searchOptions
|
||||
return err
|
||||
}
|
||||
|
||||
requestPrivilege := command.RegistryAuthenticationPrivilegedFunc(dockerCli, indexInfo, "search")
|
||||
var requestPrivilege registrytypes.RequestAuthConfig
|
||||
if dockerCli.In().IsTerminal() {
|
||||
requestPrivilege = command.RegistryAuthenticationPrivilegedFunc(dockerCli, indexInfo, "search")
|
||||
}
|
||||
results, err := dockerCli.Client().ImageSearch(ctx, options.term, registrytypes.SearchOptions{
|
||||
RegistryAuth: encodedAuth,
|
||||
PrivilegeFunc: requestPrivilege,
|
||||
|
||||
@ -82,7 +82,10 @@ func runSignImage(ctx context.Context, dockerCLI command.Cli, options signOption
|
||||
return trust.NotaryError(imgRefAndAuth.RepoInfo().Name.Name(), err)
|
||||
}
|
||||
}
|
||||
requestPrivilege := command.RegistryAuthenticationPrivilegedFunc(dockerCLI, imgRefAndAuth.RepoInfo().Index, "push")
|
||||
var requestPrivilege registrytypes.RequestAuthConfig
|
||||
if dockerCLI.In().IsTerminal() {
|
||||
requestPrivilege = command.RegistryAuthenticationPrivilegedFunc(dockerCLI, imgRefAndAuth.RepoInfo().Index, "push")
|
||||
}
|
||||
target, err := createTarget(notaryRepo, imgRefAndAuth.Tag())
|
||||
if err != nil || options.local {
|
||||
switch err := err.(type) {
|
||||
|
||||
@ -3,12 +3,14 @@ package configfile
|
||||
import (
|
||||
"encoding/base64"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"github.com/docker/cli/cli/config/credentials"
|
||||
"github.com/docker/cli/cli/config/memorystore"
|
||||
"github.com/docker/cli/cli/config/types"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/sirupsen/logrus"
|
||||
@ -46,6 +48,31 @@ type ConfigFile struct {
|
||||
Experimental string `json:"experimental,omitempty"`
|
||||
}
|
||||
|
||||
type configEnvAuth struct {
|
||||
Auth string `json:"auth"`
|
||||
}
|
||||
|
||||
type configEnv struct {
|
||||
AuthConfigs map[string]configEnvAuth `json:"auths"`
|
||||
}
|
||||
|
||||
// dockerEnvConfig is an environment variable that contains a JSON encoded
|
||||
// credential config. It only supports storing the credentials as a base64
|
||||
// encoded string in the format base64("username:pat").
|
||||
//
|
||||
// Adding additional fields will produce a parsing error.
|
||||
//
|
||||
// Example:
|
||||
//
|
||||
// {
|
||||
// "auths": {
|
||||
// "example.test": {
|
||||
// "auth": base64-encoded-username-pat
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
const dockerEnvConfig = "DOCKER_AUTH_CONFIG"
|
||||
|
||||
// ProxyConfig contains proxy configuration settings
|
||||
type ProxyConfig struct {
|
||||
HTTPProxy string `json:"httpProxy,omitempty"`
|
||||
@ -263,10 +290,64 @@ func decodeAuth(authStr string) (string, string, error) {
|
||||
// GetCredentialsStore returns a new credentials store from the settings in the
|
||||
// configuration file
|
||||
func (configFile *ConfigFile) GetCredentialsStore(registryHostname string) credentials.Store {
|
||||
store := credentials.NewFileStore(configFile)
|
||||
|
||||
if helper := getConfiguredCredentialStore(configFile, registryHostname); helper != "" {
|
||||
return newNativeStore(configFile, helper)
|
||||
store = newNativeStore(configFile, helper)
|
||||
}
|
||||
return credentials.NewFileStore(configFile)
|
||||
|
||||
envConfig := os.Getenv(dockerEnvConfig)
|
||||
if envConfig == "" {
|
||||
return store
|
||||
}
|
||||
|
||||
authConfig, err := parseEnvConfig(envConfig)
|
||||
if err != nil {
|
||||
_, _ = fmt.Fprintln(os.Stderr, "Failed to create credential store from DOCKER_AUTH_CONFIG: ", err)
|
||||
return store
|
||||
}
|
||||
|
||||
// use DOCKER_AUTH_CONFIG if set
|
||||
// it uses the native or file store as a fallback to fetch and store credentials
|
||||
envStore, err := memorystore.New(
|
||||
memorystore.WithAuthConfig(authConfig),
|
||||
memorystore.WithFallbackStore(store),
|
||||
)
|
||||
if err != nil {
|
||||
_, _ = fmt.Fprintln(os.Stderr, "Failed to create credential store from DOCKER_AUTH_CONFIG: ", err)
|
||||
return store
|
||||
}
|
||||
|
||||
return envStore
|
||||
}
|
||||
|
||||
func parseEnvConfig(v string) (map[string]types.AuthConfig, error) {
|
||||
envConfig := &configEnv{}
|
||||
decoder := json.NewDecoder(strings.NewReader(v))
|
||||
decoder.DisallowUnknownFields()
|
||||
if err := decoder.Decode(envConfig); err != nil && !errors.Is(err, io.EOF) {
|
||||
return nil, err
|
||||
}
|
||||
if decoder.More() {
|
||||
return nil, errors.New("DOCKER_AUTH_CONFIG does not support more than one JSON object")
|
||||
}
|
||||
|
||||
authConfigs := make(map[string]types.AuthConfig)
|
||||
for addr, envAuth := range envConfig.AuthConfigs {
|
||||
if envAuth.Auth == "" {
|
||||
return nil, fmt.Errorf("DOCKER_AUTH_CONFIG environment variable is missing key `auth` for %s", addr)
|
||||
}
|
||||
username, password, err := decodeAuth(envAuth.Auth)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
authConfigs[addr] = types.AuthConfig{
|
||||
Username: username,
|
||||
Password: password,
|
||||
ServerAddress: addr,
|
||||
}
|
||||
}
|
||||
return authConfigs, nil
|
||||
}
|
||||
|
||||
// var for unit testing.
|
||||
|
||||
@ -481,6 +481,133 @@ func TestLoadFromReaderWithUsernamePassword(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
const envTestUserPassConfig = `{
|
||||
"auths": {
|
||||
"env.example.test": {
|
||||
"username": "env_user",
|
||||
"password": "env_pass",
|
||||
"serveraddress": "env.example.test"
|
||||
}
|
||||
}
|
||||
}`
|
||||
|
||||
const envTestAuthConfig = `{
|
||||
"auths": {
|
||||
"env.example.test": {
|
||||
"auth": "ZW52X3VzZXI6ZW52X3Bhc3M="
|
||||
}
|
||||
}
|
||||
}`
|
||||
|
||||
func TestGetAllCredentialsFromEnvironment(t *testing.T) {
|
||||
t.Run("can parse DOCKER_AUTH_CONFIG auth field", func(t *testing.T) {
|
||||
config := &ConfigFile{}
|
||||
|
||||
t.Setenv("DOCKER_AUTH_CONFIG", envTestAuthConfig)
|
||||
|
||||
authConfigs, err := config.GetAllCredentials()
|
||||
assert.NilError(t, err)
|
||||
|
||||
expected := map[string]types.AuthConfig{
|
||||
"env.example.test": {
|
||||
Username: "env_user",
|
||||
Password: "env_pass",
|
||||
ServerAddress: "env.example.test",
|
||||
},
|
||||
}
|
||||
assert.Check(t, is.DeepEqual(authConfigs, expected))
|
||||
})
|
||||
|
||||
t.Run("malformed DOCKER_AUTH_CONFIG should fallback to underlying store", func(t *testing.T) {
|
||||
fallbackStore := map[string]types.AuthConfig{
|
||||
"fallback.example.test": {
|
||||
Username: "fallback_user",
|
||||
Password: "fallback_pass",
|
||||
ServerAddress: "fallback.example.test",
|
||||
},
|
||||
}
|
||||
config := &ConfigFile{
|
||||
AuthConfigs: fallbackStore,
|
||||
}
|
||||
|
||||
t.Setenv("DOCKER_AUTH_CONFIG", envTestUserPassConfig)
|
||||
|
||||
authConfigs, err := config.GetAllCredentials()
|
||||
assert.NilError(t, err)
|
||||
|
||||
expected := fallbackStore
|
||||
assert.Check(t, is.DeepEqual(authConfigs, expected))
|
||||
})
|
||||
|
||||
t.Run("can fetch credentials from DOCKER_AUTH_CONFIG and underlying store", func(t *testing.T) {
|
||||
configFile := New("filename")
|
||||
exampleAuth := types.AuthConfig{
|
||||
Username: "user",
|
||||
Password: "pass",
|
||||
}
|
||||
configFile.AuthConfigs["foo.example.test"] = exampleAuth
|
||||
|
||||
t.Setenv("DOCKER_AUTH_CONFIG", envTestAuthConfig)
|
||||
|
||||
authConfigs, err := configFile.GetAllCredentials()
|
||||
assert.NilError(t, err)
|
||||
|
||||
expected := map[string]types.AuthConfig{
|
||||
"foo.example.test": exampleAuth,
|
||||
"env.example.test": {
|
||||
Username: "env_user",
|
||||
Password: "env_pass",
|
||||
ServerAddress: "env.example.test",
|
||||
},
|
||||
}
|
||||
assert.Check(t, is.DeepEqual(authConfigs, expected))
|
||||
|
||||
fooConfig, err := configFile.GetAuthConfig("foo.example.test")
|
||||
assert.NilError(t, err)
|
||||
expectedAuth := expected["foo.example.test"]
|
||||
assert.Check(t, is.DeepEqual(fooConfig, expectedAuth))
|
||||
|
||||
envConfig, err := configFile.GetAuthConfig("env.example.test")
|
||||
assert.NilError(t, err)
|
||||
expectedAuth = expected["env.example.test"]
|
||||
assert.Check(t, is.DeepEqual(envConfig, expectedAuth))
|
||||
})
|
||||
|
||||
t.Run("env is ignored when empty", func(t *testing.T) {
|
||||
configFile := New("filename")
|
||||
|
||||
t.Setenv("DOCKER_AUTH_CONFIG", "")
|
||||
|
||||
authConfigs, err := configFile.GetAllCredentials()
|
||||
assert.NilError(t, err)
|
||||
assert.Check(t, is.Len(authConfigs, 0))
|
||||
})
|
||||
}
|
||||
|
||||
func TestParseEnvConfig(t *testing.T) {
|
||||
t.Run("should error on unexpected fields", func(t *testing.T) {
|
||||
_, err := parseEnvConfig(envTestUserPassConfig)
|
||||
assert.ErrorContains(t, err, "json: unknown field \"username\"")
|
||||
})
|
||||
t.Run("should be able to load env credentials", func(t *testing.T) {
|
||||
got, err := parseEnvConfig(envTestAuthConfig)
|
||||
assert.NilError(t, err)
|
||||
expected := map[string]types.AuthConfig{
|
||||
"env.example.test": {
|
||||
Username: "env_user",
|
||||
Password: "env_pass",
|
||||
ServerAddress: "env.example.test",
|
||||
},
|
||||
}
|
||||
assert.NilError(t, err)
|
||||
assert.Check(t, is.DeepEqual(got, expected))
|
||||
})
|
||||
t.Run("should not support multiple JSON objects", func(t *testing.T) {
|
||||
_, err := parseEnvConfig(`{"auths":{"env.example.test":{"auth":"something"}}}{}`)
|
||||
assert.ErrorContains(t, err, "does not support more than one JSON object")
|
||||
})
|
||||
}
|
||||
|
||||
func TestSave(t *testing.T) {
|
||||
configFile := New("test-save")
|
||||
defer os.Remove("test-save")
|
||||
|
||||
126
cli/config/memorystore/store.go
Normal file
126
cli/config/memorystore/store.go
Normal file
@ -0,0 +1,126 @@
|
||||
//go:build go1.23
|
||||
|
||||
package memorystore
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"maps"
|
||||
"os"
|
||||
"sync"
|
||||
|
||||
"github.com/docker/cli/cli/config/credentials"
|
||||
"github.com/docker/cli/cli/config/types"
|
||||
)
|
||||
|
||||
var errValueNotFound = errors.New("value not found")
|
||||
|
||||
func IsErrValueNotFound(err error) bool {
|
||||
return errors.Is(err, errValueNotFound)
|
||||
}
|
||||
|
||||
type Config struct {
|
||||
lock sync.RWMutex
|
||||
memoryCredentials map[string]types.AuthConfig
|
||||
fallbackStore credentials.Store
|
||||
}
|
||||
|
||||
func (e *Config) Erase(serverAddress string) error {
|
||||
e.lock.Lock()
|
||||
defer e.lock.Unlock()
|
||||
delete(e.memoryCredentials, serverAddress)
|
||||
|
||||
if e.fallbackStore != nil {
|
||||
err := e.fallbackStore.Erase(serverAddress)
|
||||
if err != nil {
|
||||
_, _ = fmt.Fprintln(os.Stderr, "memorystore: ", err)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (e *Config) Get(serverAddress string) (types.AuthConfig, error) {
|
||||
e.lock.RLock()
|
||||
defer e.lock.RUnlock()
|
||||
authConfig, ok := e.memoryCredentials[serverAddress]
|
||||
if !ok {
|
||||
if e.fallbackStore != nil {
|
||||
return e.fallbackStore.Get(serverAddress)
|
||||
}
|
||||
return types.AuthConfig{}, errValueNotFound
|
||||
}
|
||||
return authConfig, nil
|
||||
}
|
||||
|
||||
func (e *Config) GetAll() (map[string]types.AuthConfig, error) {
|
||||
e.lock.RLock()
|
||||
defer e.lock.RUnlock()
|
||||
creds := make(map[string]types.AuthConfig)
|
||||
|
||||
if e.fallbackStore != nil {
|
||||
fileCredentials, err := e.fallbackStore.GetAll()
|
||||
if err != nil {
|
||||
_, _ = fmt.Fprintln(os.Stderr, "memorystore: ", err)
|
||||
} else {
|
||||
creds = fileCredentials
|
||||
}
|
||||
}
|
||||
|
||||
maps.Copy(creds, e.memoryCredentials)
|
||||
return creds, nil
|
||||
}
|
||||
|
||||
func (e *Config) Store(authConfig types.AuthConfig) error {
|
||||
e.lock.Lock()
|
||||
defer e.lock.Unlock()
|
||||
e.memoryCredentials[authConfig.ServerAddress] = authConfig
|
||||
|
||||
if e.fallbackStore != nil {
|
||||
return e.fallbackStore.Store(authConfig)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// WithFallbackStore sets a fallback store.
|
||||
//
|
||||
// Write operations will be performed on both the memory store and the
|
||||
// fallback store.
|
||||
//
|
||||
// Read operations will first check the memory store, and if the credential
|
||||
// is not found, it will then check the fallback store.
|
||||
//
|
||||
// Retrieving all credentials will return from both the memory store and the
|
||||
// fallback store, merging the results from both stores into a single map.
|
||||
//
|
||||
// Data stored in the memory store will take precedence over data in the
|
||||
// fallback store.
|
||||
func WithFallbackStore(store credentials.Store) Options {
|
||||
return func(s *Config) error {
|
||||
s.fallbackStore = store
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
// WithAuthConfig allows to set the initial credentials in the memory store.
|
||||
func WithAuthConfig(config map[string]types.AuthConfig) Options {
|
||||
return func(s *Config) error {
|
||||
s.memoryCredentials = config
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
type Options func(*Config) error
|
||||
|
||||
// New creates a new in memory credential store
|
||||
func New(opts ...Options) (credentials.Store, error) {
|
||||
m := &Config{
|
||||
memoryCredentials: make(map[string]types.AuthConfig),
|
||||
}
|
||||
for _, opt := range opts {
|
||||
if err := opt(m); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
return m, nil
|
||||
}
|
||||
131
cli/config/memorystore/store_test.go
Normal file
131
cli/config/memorystore/store_test.go
Normal file
@ -0,0 +1,131 @@
|
||||
package memorystore
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/docker/cli/cli/config/types"
|
||||
"gotest.tools/v3/assert"
|
||||
is "gotest.tools/v3/assert/cmp"
|
||||
)
|
||||
|
||||
func TestMemoryStore(t *testing.T) {
|
||||
config := map[string]types.AuthConfig{
|
||||
"https://example.test": {
|
||||
Username: "something-something",
|
||||
ServerAddress: "https://example.test",
|
||||
Auth: "super_secret_token",
|
||||
},
|
||||
}
|
||||
|
||||
fallbackConfig := map[string]types.AuthConfig{
|
||||
"https://only-in-file.example.test": {
|
||||
Username: "something-something",
|
||||
ServerAddress: "https://only-in-file.example.test",
|
||||
Auth: "super_secret_token",
|
||||
},
|
||||
}
|
||||
|
||||
fallbackStore, err := New(WithAuthConfig(fallbackConfig))
|
||||
assert.NilError(t, err)
|
||||
|
||||
memoryStore, err := New(WithAuthConfig(config), WithFallbackStore(fallbackStore))
|
||||
assert.NilError(t, err)
|
||||
|
||||
t.Run("get credentials from memory store", func(t *testing.T) {
|
||||
c, err := memoryStore.Get("https://example.test")
|
||||
assert.NilError(t, err)
|
||||
assert.Equal(t, c, config["https://example.test"])
|
||||
})
|
||||
|
||||
t.Run("get credentials from fallback store", func(t *testing.T) {
|
||||
c, err := memoryStore.Get("https://only-in-file.example.test")
|
||||
assert.NilError(t, err)
|
||||
assert.Equal(t, c, fallbackConfig["https://only-in-file.example.test"])
|
||||
})
|
||||
|
||||
t.Run("storing credentials in memory store should also be in defined fallback store", func(t *testing.T) {
|
||||
err := memoryStore.Store(types.AuthConfig{
|
||||
Username: "not-in-store",
|
||||
ServerAddress: "https://not-in-store.example.test",
|
||||
Auth: "not-in-store_token",
|
||||
})
|
||||
assert.NilError(t, err)
|
||||
c, err := memoryStore.Get("https://not-in-store.example.test")
|
||||
assert.NilError(t, err)
|
||||
assert.Equal(t, c.Username, "not-in-store")
|
||||
assert.Equal(t, c.ServerAddress, "https://not-in-store.example.test")
|
||||
assert.Equal(t, c.Auth, "not-in-store_token")
|
||||
|
||||
cc, err := fallbackStore.Get("https://not-in-store.example.test")
|
||||
assert.NilError(t, err)
|
||||
assert.Equal(t, cc.Username, "not-in-store")
|
||||
assert.Equal(t, cc.ServerAddress, "https://not-in-store.example.test")
|
||||
assert.Equal(t, cc.Auth, "not-in-store_token")
|
||||
})
|
||||
|
||||
t.Run("delete credentials should remove credentials from memory store and fallback store", func(t *testing.T) {
|
||||
err := memoryStore.Store(types.AuthConfig{
|
||||
Username: "a-new-credential",
|
||||
ServerAddress: "https://a-new-credential.example.test",
|
||||
Auth: "a-new-credential_token",
|
||||
})
|
||||
assert.NilError(t, err)
|
||||
err = memoryStore.Erase("https://a-new-credential.example.test")
|
||||
assert.NilError(t, err)
|
||||
_, err = memoryStore.Get("https://a-new-credential.example.test")
|
||||
assert.Check(t, is.ErrorIs(err, errValueNotFound))
|
||||
_, err = fallbackStore.Get("https://a-new-credential.example.test")
|
||||
assert.Check(t, is.ErrorIs(err, errValueNotFound))
|
||||
})
|
||||
}
|
||||
|
||||
func TestMemoryStoreWithoutFallback(t *testing.T) {
|
||||
config := map[string]types.AuthConfig{
|
||||
"https://example.test": {
|
||||
Username: "something-something",
|
||||
ServerAddress: "https://example.test",
|
||||
Auth: "super_secret_token",
|
||||
},
|
||||
}
|
||||
|
||||
memoryStore, err := New(WithAuthConfig(config))
|
||||
assert.NilError(t, err)
|
||||
|
||||
t.Run("get credentials from memory store without fallback", func(t *testing.T) {
|
||||
c, err := memoryStore.Get("https://example.test")
|
||||
assert.NilError(t, err)
|
||||
assert.Equal(t, c, config["https://example.test"])
|
||||
})
|
||||
|
||||
t.Run("get non-existing credentials from memory store should error", func(t *testing.T) {
|
||||
_, err := memoryStore.Get("https://not-in-store.example.test")
|
||||
assert.Check(t, is.ErrorIs(err, errValueNotFound))
|
||||
})
|
||||
|
||||
t.Run("case store credentials", func(t *testing.T) {
|
||||
err := memoryStore.Store(types.AuthConfig{
|
||||
Username: "not-in-store",
|
||||
ServerAddress: "https://not-in-store.example.test",
|
||||
Auth: "not-in-store_token",
|
||||
})
|
||||
assert.NilError(t, err)
|
||||
c, err := memoryStore.Get("https://not-in-store.example.test")
|
||||
assert.NilError(t, err)
|
||||
assert.Equal(t, c.Username, "not-in-store")
|
||||
assert.Equal(t, c.ServerAddress, "https://not-in-store.example.test")
|
||||
assert.Equal(t, c.Auth, "not-in-store_token")
|
||||
})
|
||||
|
||||
t.Run("delete credentials should remove credentials from memory store", func(t *testing.T) {
|
||||
err := memoryStore.Store(types.AuthConfig{
|
||||
Username: "a-new-credential",
|
||||
ServerAddress: "https://a-new-credential.example.test",
|
||||
Auth: "a-new-credential_token",
|
||||
})
|
||||
assert.NilError(t, err)
|
||||
err = memoryStore.Erase("https://a-new-credential.example.test")
|
||||
assert.NilError(t, err)
|
||||
_, err = memoryStore.Get("https://a-new-credential.example.test")
|
||||
assert.Check(t, is.ErrorIs(err, errValueNotFound))
|
||||
})
|
||||
}
|
||||
@ -302,12 +302,12 @@ func tryPluginRun(ctx context.Context, dockerCli command.Cli, cmd *cobra.Command
|
||||
srv, err := socket.NewPluginServer(nil)
|
||||
if err == nil {
|
||||
plugincmd.Env = append(plugincmd.Env, socket.EnvKey+"="+srv.Addr().String())
|
||||
defer func() {
|
||||
// Close the server when plugin execution is over, so that in case
|
||||
// it's still open, any sockets on the filesystem are cleaned up.
|
||||
_ = srv.Close()
|
||||
}()
|
||||
}
|
||||
defer func() {
|
||||
// Close the server when plugin execution is over, so that in case
|
||||
// it's still open, any sockets on the filesystem are cleaned up.
|
||||
_ = srv.Close()
|
||||
}()
|
||||
|
||||
// Set additional environment variables specified by the caller.
|
||||
plugincmd.Env = append(plugincmd.Env, envs...)
|
||||
@ -334,7 +334,9 @@ func tryPluginRun(ctx context.Context, dockerCli command.Cli, cmd *cobra.Command
|
||||
//
|
||||
// Repeated invocations will result in EINVAL,
|
||||
// or EBADF; but that is fine for our purposes.
|
||||
_ = srv.Close()
|
||||
if srv != nil {
|
||||
_ = srv.Close()
|
||||
}
|
||||
|
||||
// force the process to terminate if it hasn't already
|
||||
if force {
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
variable "GO_VERSION" {
|
||||
default = "1.24.3"
|
||||
default = "1.24.4"
|
||||
}
|
||||
variable "VERSION" {
|
||||
default = ""
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
# syntax=docker/dockerfile:1
|
||||
|
||||
ARG GO_VERSION=1.24.3
|
||||
ARG GO_VERSION=1.24.4
|
||||
ARG ALPINE_VERSION=3.21
|
||||
|
||||
# BUILDX_VERSION sets the version of buildx to install in the dev container.
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
# syntax=docker/dockerfile:1
|
||||
|
||||
ARG GO_VERSION=1.24.3
|
||||
ARG GO_VERSION=1.24.4
|
||||
ARG ALPINE_VERSION=3.21
|
||||
ARG GOLANGCI_LINT_VERSION=v2.1.5
|
||||
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
# syntax=docker/dockerfile:1
|
||||
|
||||
ARG GO_VERSION=1.24.3
|
||||
ARG GO_VERSION=1.24.4
|
||||
ARG ALPINE_VERSION=3.21
|
||||
ARG MODOUTDATED_VERSION=v0.8.0
|
||||
|
||||
|
||||
@ -53,6 +53,7 @@ The following table provides an overview of the current status of deprecated fea
|
||||
|
||||
| Status | Feature | Deprecated | Remove |
|
||||
|------------|------------------------------------------------------------------------------------------------------------------------------------|------------|--------|
|
||||
| Deprecated | [Empty/nil fields in image Config from inspect API](#emptynil-fields-in-image-config-from-inspect-api) | v28.3 | v29.0 |
|
||||
| Deprecated | [Configuration for pushing non-distributable artifacts](#configuration-for-pushing-non-distributable-artifacts) | v28.0 | v29.0 |
|
||||
| Deprecated | [`--time` option on `docker stop` and `docker restart`](#--time-option-on-docker-stop-and-docker-restart) | v28.0 | - |
|
||||
| Removed | [Non-standard fields in image inspect](#non-standard-fields-in-image-inspect) | v27.0 | v28.2 |
|
||||
@ -120,7 +121,34 @@ The following table provides an overview of the current status of deprecated fea
|
||||
| Removed | [`--run` flag on `docker commit`](#--run-flag-on-docker-commit) | v0.10 | v1.13 |
|
||||
| Removed | [Three arguments form in `docker import`](#three-arguments-form-in-docker-import) | v0.6.7 | v1.12 |
|
||||
|
||||
## Configuration for pushing non-distributable artifacts
|
||||
### Empty/nil fields in image Config from inspect API
|
||||
|
||||
**Deprecated in Release: v28.3**
|
||||
**Target For Removal In Release: v29.0**
|
||||
|
||||
The `Config` field returned by `docker image inspect` (and the `GET /images/{name}/json`
|
||||
API endpoint) currently includes certain fields even when they are empty or nil.
|
||||
Starting in Docker v29.0, the following fields will be omitted from the API response
|
||||
when they contain empty or default values:
|
||||
|
||||
- `Cmd`
|
||||
- `Entrypoint`
|
||||
- `Env`
|
||||
- `Labels`
|
||||
- `OnBuild`
|
||||
- `User`
|
||||
- `Volumes`
|
||||
- `WorkingDir`
|
||||
|
||||
Applications consuming the image inspect API should be updated to handle the
|
||||
absence of these fields gracefully, treating missing fields as having their
|
||||
default/empty values.
|
||||
|
||||
For API version corresponding to Docker v29.0, these fields will be omitted when
|
||||
empty. They will continue to be included when using clients that request an older
|
||||
API version for backward compatibility.
|
||||
|
||||
### Configuration for pushing non-distributable artifacts
|
||||
|
||||
**Deprecated in Release: v28.0**
|
||||
**Target For Removal In Release: v29.0**
|
||||
|
||||
@ -1302,7 +1302,7 @@ The list of currently supported options that can be reconfigured is this:
|
||||
| ---------------------------------- | ----------------------------------------------------------------------------------------------------------- |
|
||||
| `debug` | Toggles debug mode of the daemon. |
|
||||
| `labels` | Replaces the daemon labels with a new set of labels. |
|
||||
| `live-restore` | Toggles [live restore](https://docs.docker.com/engine/containers/live-restore/). |
|
||||
| `live-restore` | Toggles [live restore](https://docs.docker.com/engine/daemon/live-restore/). |
|
||||
| `max-concurrent-downloads` | Configures the max concurrent downloads for each pull. |
|
||||
| `max-concurrent-uploads` | Configures the max concurrent uploads for each push. |
|
||||
| `max-download-attempts` | Configures the max download attempts for each pull. |
|
||||
|
||||
2
e2e/testdata/Dockerfile.gencerts
vendored
2
e2e/testdata/Dockerfile.gencerts
vendored
@ -1,6 +1,6 @@
|
||||
# syntax=docker/dockerfile:1
|
||||
|
||||
ARG GO_VERSION=1.24.3
|
||||
ARG GO_VERSION=1.24.4
|
||||
|
||||
FROM golang:${GO_VERSION}-alpine AS generated
|
||||
ENV GOTOOLCHAIN=local
|
||||
|
||||
45
vendor.mod
45
vendor.mod
@ -15,7 +15,7 @@ require (
|
||||
github.com/distribution/reference v0.6.0
|
||||
github.com/docker/cli-docs-tool v0.10.0
|
||||
github.com/docker/distribution v2.8.3+incompatible
|
||||
github.com/docker/docker v28.2.0-rc.2.0.20250528125821-0e2cc22d36ae+incompatible // v28.2-dev
|
||||
github.com/docker/docker v28.3.0-rc.2+incompatible
|
||||
github.com/docker/docker-credential-helpers v0.9.3
|
||||
github.com/docker/go-connections v0.5.0
|
||||
github.com/docker/go-units v0.5.0
|
||||
@ -29,7 +29,7 @@ require (
|
||||
github.com/mattn/go-runewidth v0.0.16
|
||||
github.com/moby/go-archive v0.1.0
|
||||
github.com/moby/patternmatcher v0.6.0
|
||||
github.com/moby/swarmkit/v2 v2.0.0-20250103191802-8c1959736554
|
||||
github.com/moby/swarmkit/v2 v2.0.0
|
||||
github.com/moby/sys/atomicwriter v0.1.0
|
||||
github.com/moby/sys/capability v0.4.0
|
||||
github.com/moby/sys/sequential v0.6.0
|
||||
@ -46,15 +46,15 @@ require (
|
||||
github.com/theupdateframework/notary v0.7.1-0.20210315103452-bf96a202a09a
|
||||
github.com/tonistiigi/go-rosetta v0.0.0-20220804170347-3f4430f2d346
|
||||
github.com/xeipuuv/gojsonschema v1.2.0
|
||||
go.opentelemetry.io/otel v1.31.0
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.31.0
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.31.0
|
||||
go.opentelemetry.io/otel/metric v1.31.0
|
||||
go.opentelemetry.io/otel/sdk v1.31.0
|
||||
go.opentelemetry.io/otel/sdk/metric v1.31.0
|
||||
go.opentelemetry.io/otel/trace v1.31.0
|
||||
golang.org/x/sync v0.13.0
|
||||
golang.org/x/sys v0.32.0
|
||||
go.opentelemetry.io/otel v1.35.0
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.35.0
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.35.0
|
||||
go.opentelemetry.io/otel/metric v1.35.0
|
||||
go.opentelemetry.io/otel/sdk v1.35.0
|
||||
go.opentelemetry.io/otel/sdk/metric v1.35.0
|
||||
go.opentelemetry.io/otel/trace v1.35.0
|
||||
golang.org/x/sync v0.14.0
|
||||
golang.org/x/sys v0.33.0
|
||||
golang.org/x/term v0.31.0
|
||||
golang.org/x/text v0.24.0
|
||||
gopkg.in/yaml.v3 v3.0.1
|
||||
@ -78,7 +78,7 @@ require (
|
||||
github.com/go-logr/stdr v1.2.2 // indirect
|
||||
github.com/golang/protobuf v1.5.4 // indirect
|
||||
github.com/gorilla/mux v1.8.1 // indirect
|
||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 // indirect
|
||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.1 // indirect
|
||||
github.com/inconshreveable/mousetrap v1.1.0 // indirect
|
||||
github.com/klauspost/compress v1.18.0 // indirect
|
||||
github.com/miekg/pkcs11 v1.1.1 // indirect
|
||||
@ -87,24 +87,25 @@ require (
|
||||
github.com/moby/sys/user v0.4.0 // indirect
|
||||
github.com/moby/sys/userns v0.1.0 // indirect
|
||||
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
|
||||
github.com/prometheus/client_golang v1.20.5 // indirect
|
||||
github.com/prometheus/client_golang v1.22.0 // indirect
|
||||
github.com/prometheus/client_model v0.6.1 // indirect
|
||||
github.com/prometheus/common v0.55.0 // indirect
|
||||
github.com/prometheus/common v0.62.0 // indirect
|
||||
github.com/prometheus/procfs v0.15.1 // indirect
|
||||
github.com/rivo/uniseg v0.2.0 // indirect
|
||||
github.com/russross/blackfriday/v2 v2.1.0 // indirect
|
||||
github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect
|
||||
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect
|
||||
go.etcd.io/etcd/raft/v3 v3.5.16 // indirect
|
||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.56.0 // indirect
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.31.0 // indirect
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.31.0 // indirect
|
||||
go.opentelemetry.io/proto/otlp v1.3.1 // indirect
|
||||
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
|
||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0 // indirect
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.35.0 // indirect
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.35.0 // indirect
|
||||
go.opentelemetry.io/proto/otlp v1.5.0 // indirect
|
||||
golang.org/x/crypto v0.37.0 // indirect
|
||||
golang.org/x/net v0.39.0 // indirect
|
||||
golang.org/x/time v0.11.0 // indirect
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20241021214115-324edc3d5d38 // indirect
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20241021214115-324edc3d5d38 // indirect
|
||||
google.golang.org/grpc v1.69.4 // indirect
|
||||
google.golang.org/protobuf v1.35.2 // indirect
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20250218202821-56aae31c358a // indirect
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20250218202821-56aae31c358a // indirect
|
||||
google.golang.org/grpc v1.72.2 // indirect
|
||||
google.golang.org/protobuf v1.36.6 // indirect
|
||||
)
|
||||
|
||||
90
vendor.sum
90
vendor.sum
@ -57,8 +57,8 @@ github.com/docker/cli-docs-tool v0.10.0/go.mod h1:5EM5zPnT2E7yCLERZmrDA234Vwn09f
|
||||
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/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
|
||||
github.com/docker/docker v28.2.0-rc.2.0.20250528125821-0e2cc22d36ae+incompatible h1:Pdcl2hlBHJ4r5x17UbJFWl2VJT753caMxKDxCjOH8i4=
|
||||
github.com/docker/docker v28.2.0-rc.2.0.20250528125821-0e2cc22d36ae+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
||||
github.com/docker/docker v28.3.0-rc.2+incompatible h1:4qcy6nOwGYCeEyFWs0SrH6FC1Hn6pp0z28JYNCILw8w=
|
||||
github.com/docker/docker v28.3.0-rc.2+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
||||
github.com/docker/docker-credential-helpers v0.9.3 h1:gAm/VtF9wgqJMoxzT3Gj5p4AqIjCBS4wrsOh9yRqcz8=
|
||||
github.com/docker/docker-credential-helpers v0.9.3/go.mod h1:x+4Gbw9aGmChi3qTLZj8Dfn0TD20M/fuWy0E5+WDeCo=
|
||||
github.com/docker/go v1.5.1-1.0.20160303222718-d30aec9fd63c h1:lzqkGL9b3znc+ZUgi7FlLnqjQhcXxkNM/quxIjBVMD0=
|
||||
@ -122,8 +122,8 @@ github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+
|
||||
github.com/gorilla/mux v1.7.0/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
|
||||
github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY=
|
||||
github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ=
|
||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 h1:asbCHRVmodnJTuQ3qamDwqVOIjwqUPTYmYuemVOx+Ys=
|
||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0/go.mod h1:ggCgvZ2r7uOoQjOyu2Y1NhHmEPPzzuhWgcza5M1Ji1I=
|
||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.1 h1:e9Rjr40Z98/clHv5Yg79Is0NtosR5LXRvdr7o/6NwbA=
|
||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.1/go.mod h1:tIxuGz/9mpox++sgp9fJjHO0+q1X9/UOWd798aAm22M=
|
||||
github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed h1:5upAirOpQc1Q53c0bnx2ufif5kANL7bfZWcc6VJWJd8=
|
||||
github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed/go.mod h1:tMWxXQ9wFIaZeTI9F+hmhFiGpFmhOHzyShyFUhRm0H4=
|
||||
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
|
||||
@ -174,8 +174,8 @@ github.com/moby/go-archive v0.1.0 h1:Kk/5rdW/g+H8NHdJW2gsXyZ7UnzvJNOy6VKJqueWdcQ
|
||||
github.com/moby/go-archive v0.1.0/go.mod h1:G9B+YoujNohJmrIYFBpSd54GTUB4lt9S+xVQvsJyFuo=
|
||||
github.com/moby/patternmatcher v0.6.0 h1:GmP9lR19aU5GqSSFko+5pRqHi+Ohk1O69aFiKkVGiPk=
|
||||
github.com/moby/patternmatcher v0.6.0/go.mod h1:hDPoyOpDY7OrrMDLaYoY3hf52gNCR/YOUYxkhApJIxc=
|
||||
github.com/moby/swarmkit/v2 v2.0.0-20250103191802-8c1959736554 h1:DMHJbgyNZWyrPKYjCYt2IxEO7KA0eSd4fo6KQsv2W84=
|
||||
github.com/moby/swarmkit/v2 v2.0.0-20250103191802-8c1959736554/go.mod h1:mTTGIAz/59OGZR5Qe+QByIe3Nxc+sSuJkrsStFhr6Lg=
|
||||
github.com/moby/swarmkit/v2 v2.0.0 h1:jkWQKQaJ4ltA61/mC9UdPe1McLma55RUcacTO+pPweY=
|
||||
github.com/moby/swarmkit/v2 v2.0.0/go.mod h1:mTTGIAz/59OGZR5Qe+QByIe3Nxc+sSuJkrsStFhr6Lg=
|
||||
github.com/moby/sys/atomicwriter v0.1.0 h1:kw5D/EqkBwsBFi0ss9v1VG3wIkVhzGvLklJ+w3A14Sw=
|
||||
github.com/moby/sys/atomicwriter v0.1.0/go.mod h1:Ul8oqv2ZMNHOceF643P6FKPXeCmYtlQMvpizfsSoaWs=
|
||||
github.com/moby/sys/capability v0.4.0 h1:4D4mI6KlNtWMCM1Z/K0i7RV1FkX+DBDHKVJpCndZoHk=
|
||||
@ -224,8 +224,8 @@ github.com/prometheus/client_golang v0.9.0-pre1.0.20180209125602-c332b6f63c06/go
|
||||
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
|
||||
github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
|
||||
github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g=
|
||||
github.com/prometheus/client_golang v1.20.5 h1:cxppBPuYhUnsO6yo/aoRol4L7q7UFfdm+bR9r+8l63Y=
|
||||
github.com/prometheus/client_golang v1.20.5/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE=
|
||||
github.com/prometheus/client_golang v1.22.0 h1:rb93p9lokFEsctTys46VnV1kLCDpVZ0a/Y92Vm0Zc6Q=
|
||||
github.com/prometheus/client_golang v1.22.0/go.mod h1:R7ljNsLXhuQXYZYtw6GAE9AZg8Y7vEW5scdCXrWRXC0=
|
||||
github.com/prometheus/client_model v0.0.0-20171117100541-99fa1f4be8e5/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
|
||||
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
|
||||
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||
@ -234,8 +234,8 @@ github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQy
|
||||
github.com/prometheus/common v0.0.0-20180110214958-89604d197083/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
|
||||
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
||||
github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc=
|
||||
github.com/prometheus/common v0.55.0 h1:KEi6DK7lXW/m7Ig5i47x0vRzuBsHuvJdi5ee6Y3G1dc=
|
||||
github.com/prometheus/common v0.55.0/go.mod h1:2SECS4xJG1kd8XF9IcM1gMX6510RAEL65zxzNImwdc8=
|
||||
github.com/prometheus/common v0.62.0 h1:xasJaQlnWAeyHdUBeGjXmutelfJHWMRr+Fg4QszZ2Io=
|
||||
github.com/prometheus/common v0.62.0/go.mod h1:vyBcEuLSvWos9B1+CyL7JZ2up+uFzXhkqml0W5zIY1I=
|
||||
github.com/prometheus/procfs v0.0.0-20180125133057-cb4147076ac7/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
||||
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
||||
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
||||
@ -296,28 +296,30 @@ github.com/zmap/zlint/v3 v3.1.0 h1:WjVytZo79m/L1+/Mlphl09WBob6YTGljN5IGWZFpAv0=
|
||||
github.com/zmap/zlint/v3 v3.1.0/go.mod h1:L7t8s3sEKkb0A2BxGy1IWrxt1ZATa1R4QfJZaQOD3zU=
|
||||
go.etcd.io/etcd/raft/v3 v3.5.16 h1:zBXA3ZUpYs1AwiLGPafYAKKl/CORn/uaxYDwlNwndAk=
|
||||
go.etcd.io/etcd/raft/v3 v3.5.16/go.mod h1:P4UP14AxofMJ/54boWilabqqWoW9eLodl6I5GdGzazI=
|
||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.56.0 h1:UP6IpuHFkUgOQL9FFQFrZ+5LiwhhYRbi7VZSIx6Nj5s=
|
||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.56.0/go.mod h1:qxuZLtbq5QDtdeSHsS7bcf6EH6uO6jUAgk764zd3rhM=
|
||||
go.opentelemetry.io/otel v1.31.0 h1:NsJcKPIW0D0H3NgzPDHmo0WW6SptzPdqg/L1zsIm2hY=
|
||||
go.opentelemetry.io/otel v1.31.0/go.mod h1:O0C14Yl9FgkjqcCZAsE053C13OaddMYr/hz6clDkEJE=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.31.0 h1:FZ6ei8GFW7kyPYdxJaV2rgI6M+4tvZzhYsQ2wgyVC08=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.31.0/go.mod h1:MdEu/mC6j3D+tTEfvI15b5Ci2Fn7NneJ71YMoiS3tpI=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.31.0 h1:K0XaT3DwHAcV4nKLzcQvwAgSyisUghWoY20I7huthMk=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.31.0/go.mod h1:B5Ki776z/MBnVha1Nzwp5arlzBbE3+1jk+pGmaP5HME=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.31.0 h1:FFeLy03iVTXP6ffeN2iXrxfGsZGCjVx0/4KlizjyBwU=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.31.0/go.mod h1:TMu73/k1CP8nBUpDLc71Wj/Kf7ZS9FK5b53VapRsP9o=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.31.0 h1:lUsI2TYsQw2r1IASwoROaCnjdj2cvC2+Jbxvk6nHnWU=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.31.0/go.mod h1:2HpZxxQurfGxJlJDblybejHB6RX6pmExPNe517hREw4=
|
||||
go.opentelemetry.io/otel/metric v1.31.0 h1:FSErL0ATQAmYHUIzSezZibnyVlft1ybhy4ozRPcF2fE=
|
||||
go.opentelemetry.io/otel/metric v1.31.0/go.mod h1:C3dEloVbLuYoX41KpmAhOqNriGbA+qqH6PQ5E5mUfnY=
|
||||
go.opentelemetry.io/otel/sdk v1.31.0 h1:xLY3abVHYZ5HSfOg3l2E5LUj2Cwva5Y7yGxnSW9H5Gk=
|
||||
go.opentelemetry.io/otel/sdk v1.31.0/go.mod h1:TfRbMdhvxIIr/B2N2LQW2S5v9m3gOQ/08KsbbO5BPT0=
|
||||
go.opentelemetry.io/otel/sdk/metric v1.31.0 h1:i9hxxLJF/9kkvfHppyLL55aW7iIJz4JjxTeYusH7zMc=
|
||||
go.opentelemetry.io/otel/sdk/metric v1.31.0/go.mod h1:CRInTMVvNhUKgSAMbKyTMxqOBC0zgyxzW55lZzX43Y8=
|
||||
go.opentelemetry.io/otel/trace v1.31.0 h1:ffjsj1aRouKewfr85U2aGagJ46+MvodynlQ1HYdmJys=
|
||||
go.opentelemetry.io/otel/trace v1.31.0/go.mod h1:TXZkRk7SM2ZQLtR6eoAWQFIHPvzQ06FJAsO1tJg480A=
|
||||
go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0=
|
||||
go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8=
|
||||
go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
|
||||
go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
|
||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0 h1:sbiXRNDSWJOTobXh5HyQKjq6wUC5tNybqjIqDpAY4CU=
|
||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0/go.mod h1:69uWxva0WgAA/4bu2Yy70SLDBwZXuQ6PbBpbsa5iZrQ=
|
||||
go.opentelemetry.io/otel v1.35.0 h1:xKWKPxrxB6OtMCbmMY021CqC45J+3Onta9MqjhnusiQ=
|
||||
go.opentelemetry.io/otel v1.35.0/go.mod h1:UEqy8Zp11hpkUrL73gSlELM0DupHoiq72dR+Zqel/+Y=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.35.0 h1:QcFwRrZLc82r8wODjvyCbP7Ifp3UANaBSmhDSFjnqSc=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.35.0/go.mod h1:CXIWhUomyWBG/oY2/r/kLp6K/cmx9e/7DLpBuuGdLCA=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.35.0 h1:1fTNlAIJZGWLP5FVu0fikVry1IsiUnXjf7QFvoNN3Xw=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.35.0/go.mod h1:zjPK58DtkqQFn+YUMbx0M2XV3QgKU0gS9LeGohREyK4=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.35.0 h1:m639+BofXTvcY1q8CGs4ItwQarYtJPOWmVobfM1HpVI=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.35.0/go.mod h1:LjReUci/F4BUyv+y4dwnq3h/26iNOeC3wAIqgvTIZVo=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.35.0 h1:xJ2qHD0C1BeYVTLLR9sX12+Qb95kfeD/byKj6Ky1pXg=
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.35.0/go.mod h1:u5BF1xyjstDowA1R5QAO9JHzqK+ublenEW/dyqTjBVk=
|
||||
go.opentelemetry.io/otel/metric v1.35.0 h1:0znxYu2SNyuMSQT4Y9WDWej0VpcsxkuklLa4/siN90M=
|
||||
go.opentelemetry.io/otel/metric v1.35.0/go.mod h1:nKVFgxBZ2fReX6IlyW28MgZojkoAkJGaE8CpgeAU3oE=
|
||||
go.opentelemetry.io/otel/sdk v1.35.0 h1:iPctf8iprVySXSKJffSS79eOjl9pvxV9ZqOWT0QejKY=
|
||||
go.opentelemetry.io/otel/sdk v1.35.0/go.mod h1:+ga1bZliga3DxJ3CQGg3updiaAJoNECOgJREo9KHGQg=
|
||||
go.opentelemetry.io/otel/sdk/metric v1.35.0 h1:1RriWBmCKgkeHEhM7a2uMjMUfP7MsOF5JpUCaEqEI9o=
|
||||
go.opentelemetry.io/otel/sdk/metric v1.35.0/go.mod h1:is6XYCUMpcKi+ZsOvfluY5YstFnhW0BidkR+gL+qN+w=
|
||||
go.opentelemetry.io/otel/trace v1.35.0 h1:dPpEfJu1sDIqruz7BHFG3c7528f6ddfSWfFDVt/xgMs=
|
||||
go.opentelemetry.io/otel/trace v1.35.0/go.mod h1:WUk7DtFp1Aw2MkvqGdwiXYDZZNvA/1J8o6xRXLrIkyc=
|
||||
go.opentelemetry.io/proto/otlp v1.5.0 h1:xJvq7gMzB31/d406fB8U5CBdyQGw4P399D1aQWU/3i4=
|
||||
go.opentelemetry.io/proto/otlp v1.5.0/go.mod h1:keN8WnHxOy8PG0rQZjJJ5A2ebUoafqWp0eVQ4yIXvJ4=
|
||||
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
|
||||
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
|
||||
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
||||
@ -346,8 +348,8 @@ golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJ
|
||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.13.0 h1:AauUjRAJ9OSnvULf/ARrrVywoJDy0YS2AwQ98I37610=
|
||||
golang.org/x/sync v0.13.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
|
||||
golang.org/x/sync v0.14.0 h1:woo0S4Yywslg6hp4eUFjTVOyKt0RookbpAHG4c1HmhQ=
|
||||
golang.org/x/sync v0.14.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
|
||||
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
@ -360,8 +362,8 @@ golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7w
|
||||
golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20=
|
||||
golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
|
||||
golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw=
|
||||
golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
|
||||
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
|
||||
golang.org/x/term v0.31.0 h1:erwDkOK1Msy6offm1mOgvspSkslFnIGsFnxOKoufg3o=
|
||||
golang.org/x/term v0.31.0/go.mod h1:R4BeIy7D95HzImkxGkTW1UQTtP54tio2RyHz7PwK0aw=
|
||||
@ -379,15 +381,15 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
|
||||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20241021214115-324edc3d5d38 h1:2oV8dfuIkM1Ti7DwXc0BJfnwr9csz4TDXI9EmiI+Rbw=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20241021214115-324edc3d5d38/go.mod h1:vuAjtvlwkDKF6L1GQ0SokiRLCGFfeBUXWr/aFFkHACc=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20241021214115-324edc3d5d38 h1:zciRKQ4kBpFgpfC5QQCVtnnNAcLIqweL7plyZRQHVpI=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20241021214115-324edc3d5d38/go.mod h1:GX3210XPVPUjJbTUbvwI8f2IpZDMZuPJWDzDuebbviI=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20250218202821-56aae31c358a h1:nwKuGPlUAt+aR+pcrkfFRrTU1BVrSmYyYMxYbUIVHr0=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20250218202821-56aae31c358a/go.mod h1:3kWAYMk1I75K4vykHtKt2ycnOgpA6974V7bREqbsenU=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20250218202821-56aae31c358a h1:51aaUVRocpvUOSQKM6Q7VuoaktNIaMCLuhZB6DKksq4=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20250218202821-56aae31c358a/go.mod h1:uRxBH1mhmO8PGhU89cMcHaXKZqO+OfakD8QQO0oYwlQ=
|
||||
google.golang.org/grpc v1.0.5/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
|
||||
google.golang.org/grpc v1.69.4 h1:MF5TftSMkd8GLw/m0KM6V8CMOCY6NZ1NQDPGFgbTt4A=
|
||||
google.golang.org/grpc v1.69.4/go.mod h1:vyjdE6jLBI76dgpDojsFGNaHlxdjXN9ghpnd2o7JGZ4=
|
||||
google.golang.org/protobuf v1.35.2 h1:8Ar7bF+apOIoThw1EdZl0p1oWvMqTHmpA2fRTyZO8io=
|
||||
google.golang.org/protobuf v1.35.2/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
|
||||
google.golang.org/grpc v1.72.2 h1:TdbGzwb82ty4OusHWepvFWGLgIbNo1/SUynEN0ssqv8=
|
||||
google.golang.org/grpc v1.72.2/go.mod h1:wH5Aktxcg25y1I3w7H69nHfXdOG3UiadoBtjh3izSDM=
|
||||
google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY=
|
||||
google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY=
|
||||
gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U=
|
||||
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
|
||||
gopkg.in/cenkalti/backoff.v2 v2.2.1 h1:eJ9UAg01/HIHG987TwxvnzK2MgxXq97YY6rYDpY9aII=
|
||||
|
||||
4
vendor/github.com/docker/docker/api/common.go
generated
vendored
4
vendor/github.com/docker/docker/api/common.go
generated
vendored
@ -1,9 +1,9 @@
|
||||
package api // import "github.com/docker/docker/api"
|
||||
package api
|
||||
|
||||
// Common constants for daemon and client.
|
||||
const (
|
||||
// DefaultVersion of the current REST API.
|
||||
DefaultVersion = "1.50"
|
||||
DefaultVersion = "1.51"
|
||||
|
||||
// MinSupportedAPIVersion is the minimum API version that can be supported
|
||||
// by the API server, specified as "major.minor". Note that the daemon
|
||||
|
||||
11
vendor/github.com/docker/docker/api/swagger.yaml
generated
vendored
11
vendor/github.com/docker/docker/api/swagger.yaml
generated
vendored
@ -19,10 +19,10 @@ produces:
|
||||
consumes:
|
||||
- "application/json"
|
||||
- "text/plain"
|
||||
basePath: "/v1.50"
|
||||
basePath: "/v1.51"
|
||||
info:
|
||||
title: "Docker Engine API"
|
||||
version: "1.50"
|
||||
version: "1.51"
|
||||
x-logo:
|
||||
url: "https://docs.docker.com/assets/images/logo-docker-main.png"
|
||||
description: |
|
||||
@ -56,7 +56,7 @@ info:
|
||||
is returned.
|
||||
|
||||
If you omit the version-prefix, the current version of the API (v1.50) is used.
|
||||
For example, calling `/info` is the same as calling `/v1.50/info`. Using the
|
||||
For example, calling `/info` is the same as calling `/v1.51/info`. Using the
|
||||
API without a version-prefix is deprecated and will be removed in a future release.
|
||||
|
||||
Engine releases in the near future should support this version of the API,
|
||||
@ -2196,8 +2196,7 @@ definitions:
|
||||
Number of containers using this image. Includes both stopped and running
|
||||
containers.
|
||||
|
||||
This size is not calculated by default, and depends on which API endpoint
|
||||
is used. `-1` indicates that the value has not been set / calculated.
|
||||
`-1` indicates that the value has not been set / calculated.
|
||||
x-nullable: false
|
||||
type: "integer"
|
||||
example: 2
|
||||
@ -5863,7 +5862,7 @@ definitions:
|
||||
type: "integer"
|
||||
format: "uint64"
|
||||
x-nullable: true
|
||||
example: 18446744073709551615
|
||||
example: "18446744073709551615"
|
||||
|
||||
ContainerThrottlingData:
|
||||
description: |
|
||||
|
||||
2
vendor/github.com/docker/docker/api/types/blkiodev/blkio.go
generated
vendored
2
vendor/github.com/docker/docker/api/types/blkiodev/blkio.go
generated
vendored
@ -1,4 +1,4 @@
|
||||
package blkiodev // import "github.com/docker/docker/api/types/blkiodev"
|
||||
package blkiodev
|
||||
|
||||
import "fmt"
|
||||
|
||||
|
||||
2
vendor/github.com/docker/docker/api/types/client.go
generated
vendored
2
vendor/github.com/docker/docker/api/types/client.go
generated
vendored
@ -1,4 +1,4 @@
|
||||
package types // import "github.com/docker/docker/api/types"
|
||||
package types
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
|
||||
2
vendor/github.com/docker/docker/api/types/container/config.go
generated
vendored
2
vendor/github.com/docker/docker/api/types/container/config.go
generated
vendored
@ -1,4 +1,4 @@
|
||||
package container // import "github.com/docker/docker/api/types/container"
|
||||
package container
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
4
vendor/github.com/docker/docker/api/types/container/exec.go
generated
vendored
4
vendor/github.com/docker/docker/api/types/container/exec.go
generated
vendored
@ -18,11 +18,13 @@ type ExecOptions struct {
|
||||
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
|
||||
|
||||
// Deprecated: the Detach field is not used, and will be removed in a future release.
|
||||
Detach bool
|
||||
}
|
||||
|
||||
// ExecStartOptions is a temp struct used by execStart
|
||||
|
||||
2
vendor/github.com/docker/docker/api/types/container/hostconfig.go
generated
vendored
2
vendor/github.com/docker/docker/api/types/container/hostconfig.go
generated
vendored
@ -1,4 +1,4 @@
|
||||
package container // import "github.com/docker/docker/api/types/container"
|
||||
package container
|
||||
|
||||
import (
|
||||
"errors"
|
||||
|
||||
2
vendor/github.com/docker/docker/api/types/container/hostconfig_unix.go
generated
vendored
2
vendor/github.com/docker/docker/api/types/container/hostconfig_unix.go
generated
vendored
@ -1,6 +1,6 @@
|
||||
//go:build !windows
|
||||
|
||||
package container // import "github.com/docker/docker/api/types/container"
|
||||
package container
|
||||
|
||||
import "github.com/docker/docker/api/types/network"
|
||||
|
||||
|
||||
2
vendor/github.com/docker/docker/api/types/container/hostconfig_windows.go
generated
vendored
2
vendor/github.com/docker/docker/api/types/container/hostconfig_windows.go
generated
vendored
@ -1,4 +1,4 @@
|
||||
package container // import "github.com/docker/docker/api/types/container"
|
||||
package container
|
||||
|
||||
import "github.com/docker/docker/api/types/network"
|
||||
|
||||
|
||||
2
vendor/github.com/docker/docker/api/types/container/waitcondition.go
generated
vendored
2
vendor/github.com/docker/docker/api/types/container/waitcondition.go
generated
vendored
@ -1,4 +1,4 @@
|
||||
package container // import "github.com/docker/docker/api/types/container"
|
||||
package container
|
||||
|
||||
// WaitCondition is a type used to specify a container state for which
|
||||
// to wait.
|
||||
|
||||
14
vendor/github.com/docker/docker/api/types/events/events.go
generated
vendored
14
vendor/github.com/docker/docker/api/types/events/events.go
generated
vendored
@ -1,4 +1,5 @@
|
||||
package events // import "github.com/docker/docker/api/types/events"
|
||||
package events
|
||||
|
||||
import "github.com/docker/docker/api/types/filters"
|
||||
|
||||
// Type is used for event-types.
|
||||
@ -111,11 +112,14 @@ type Actor struct {
|
||||
|
||||
// Message represents the information an event contains
|
||||
type Message struct {
|
||||
// Deprecated information from JSONMessage.
|
||||
// Deprecated: use Action instead.
|
||||
// Information from JSONMessage.
|
||||
// With data only in container events.
|
||||
Status string `json:"status,omitempty"` // Deprecated: use Action instead.
|
||||
ID string `json:"id,omitempty"` // Deprecated: use Actor.ID instead.
|
||||
From string `json:"from,omitempty"` // Deprecated: use Actor.Attributes["image"] instead.
|
||||
Status string `json:"status,omitempty"`
|
||||
// Deprecated: use Actor.ID instead.
|
||||
ID string `json:"id,omitempty"`
|
||||
// Deprecated: use Actor.Attributes["image"] instead.
|
||||
From string `json:"from,omitempty"`
|
||||
|
||||
Type Type
|
||||
Action Action
|
||||
|
||||
2
vendor/github.com/docker/docker/api/types/filters/parse.go
generated
vendored
2
vendor/github.com/docker/docker/api/types/filters/parse.go
generated
vendored
@ -2,7 +2,7 @@
|
||||
Package filters provides tools for encoding a mapping of keys to a set of
|
||||
multiple values.
|
||||
*/
|
||||
package filters // import "github.com/docker/docker/api/types/filters"
|
||||
package filters
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
|
||||
2
vendor/github.com/docker/docker/api/types/image/image_history.go
generated
vendored
2
vendor/github.com/docker/docker/api/types/image/image_history.go
generated
vendored
@ -1,4 +1,4 @@
|
||||
package image // import "github.com/docker/docker/api/types/image"
|
||||
package image
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Code generated by `swagger generate operation`. DO NOT EDIT.
|
||||
|
||||
2
vendor/github.com/docker/docker/api/types/image/opts.go
generated
vendored
2
vendor/github.com/docker/docker/api/types/image/opts.go
generated
vendored
@ -75,6 +75,8 @@ type ListOptions struct {
|
||||
SharedSize bool
|
||||
|
||||
// ContainerCount indicates whether container count should be computed.
|
||||
//
|
||||
// Deprecated: This field has been unused and is no longer required and will be removed in a future version.
|
||||
ContainerCount bool
|
||||
|
||||
// Manifests indicates whether the image manifests should be returned.
|
||||
|
||||
2
vendor/github.com/docker/docker/api/types/mount/mount.go
generated
vendored
2
vendor/github.com/docker/docker/api/types/mount/mount.go
generated
vendored
@ -1,4 +1,4 @@
|
||||
package mount // import "github.com/docker/docker/api/types/mount"
|
||||
package mount
|
||||
|
||||
import (
|
||||
"os"
|
||||
|
||||
2
vendor/github.com/docker/docker/api/types/network/network.go
generated
vendored
2
vendor/github.com/docker/docker/api/types/network/network.go
generated
vendored
@ -1,4 +1,4 @@
|
||||
package network // import "github.com/docker/docker/api/types/network"
|
||||
package network
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
2
vendor/github.com/docker/docker/api/types/plugin_responses.go
generated
vendored
2
vendor/github.com/docker/docker/api/types/plugin_responses.go
generated
vendored
@ -1,4 +1,4 @@
|
||||
package types // import "github.com/docker/docker/api/types"
|
||||
package types
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
|
||||
3
vendor/github.com/docker/docker/api/types/registry/authconfig.go
generated
vendored
3
vendor/github.com/docker/docker/api/types/registry/authconfig.go
generated
vendored
@ -1,4 +1,5 @@
|
||||
package registry // import "github.com/docker/docker/api/types/registry"
|
||||
package registry
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/base64"
|
||||
|
||||
2
vendor/github.com/docker/docker/api/types/registry/authenticate.go
generated
vendored
2
vendor/github.com/docker/docker/api/types/registry/authenticate.go
generated
vendored
@ -1,4 +1,4 @@
|
||||
package registry // import "github.com/docker/docker/api/types/registry"
|
||||
package registry
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// DO NOT EDIT THIS FILE
|
||||
|
||||
2
vendor/github.com/docker/docker/api/types/registry/registry.go
generated
vendored
2
vendor/github.com/docker/docker/api/types/registry/registry.go
generated
vendored
@ -1,7 +1,7 @@
|
||||
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
|
||||
//go:build go1.23
|
||||
|
||||
package registry // import "github.com/docker/docker/api/types/registry"
|
||||
package registry
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
|
||||
2
vendor/github.com/docker/docker/api/types/strslice/strslice.go
generated
vendored
2
vendor/github.com/docker/docker/api/types/strslice/strslice.go
generated
vendored
@ -1,4 +1,4 @@
|
||||
package strslice // import "github.com/docker/docker/api/types/strslice"
|
||||
package strslice
|
||||
|
||||
import "encoding/json"
|
||||
|
||||
|
||||
2
vendor/github.com/docker/docker/api/types/swarm/common.go
generated
vendored
2
vendor/github.com/docker/docker/api/types/swarm/common.go
generated
vendored
@ -1,4 +1,4 @@
|
||||
package swarm // import "github.com/docker/docker/api/types/swarm"
|
||||
package swarm
|
||||
|
||||
import (
|
||||
"strconv"
|
||||
|
||||
2
vendor/github.com/docker/docker/api/types/swarm/config.go
generated
vendored
2
vendor/github.com/docker/docker/api/types/swarm/config.go
generated
vendored
@ -1,4 +1,4 @@
|
||||
package swarm // import "github.com/docker/docker/api/types/swarm"
|
||||
package swarm
|
||||
|
||||
import (
|
||||
"os"
|
||||
|
||||
2
vendor/github.com/docker/docker/api/types/swarm/container.go
generated
vendored
2
vendor/github.com/docker/docker/api/types/swarm/container.go
generated
vendored
@ -1,4 +1,4 @@
|
||||
package swarm // import "github.com/docker/docker/api/types/swarm"
|
||||
package swarm
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
2
vendor/github.com/docker/docker/api/types/swarm/network.go
generated
vendored
2
vendor/github.com/docker/docker/api/types/swarm/network.go
generated
vendored
@ -1,4 +1,4 @@
|
||||
package swarm // import "github.com/docker/docker/api/types/swarm"
|
||||
package swarm
|
||||
|
||||
import (
|
||||
"github.com/docker/docker/api/types/network"
|
||||
|
||||
3
vendor/github.com/docker/docker/api/types/swarm/node.go
generated
vendored
3
vendor/github.com/docker/docker/api/types/swarm/node.go
generated
vendored
@ -1,4 +1,5 @@
|
||||
package swarm // import "github.com/docker/docker/api/types/swarm"
|
||||
package swarm
|
||||
|
||||
import "github.com/docker/docker/api/types/filters"
|
||||
|
||||
// Node represents a node.
|
||||
|
||||
2
vendor/github.com/docker/docker/api/types/swarm/runtime.go
generated
vendored
2
vendor/github.com/docker/docker/api/types/swarm/runtime.go
generated
vendored
@ -1,4 +1,4 @@
|
||||
package swarm // import "github.com/docker/docker/api/types/swarm"
|
||||
package swarm
|
||||
|
||||
// RuntimeType is the type of runtime used for the TaskSpec
|
||||
type RuntimeType string
|
||||
|
||||
2
vendor/github.com/docker/docker/api/types/swarm/runtime/gen.go
generated
vendored
2
vendor/github.com/docker/docker/api/types/swarm/runtime/gen.go
generated
vendored
@ -1,3 +1,3 @@
|
||||
//go:generate protoc --gogofaster_out=import_path=github.com/docker/docker/api/types/swarm/runtime:. plugin.proto
|
||||
|
||||
package runtime // import "github.com/docker/docker/api/types/swarm/runtime"
|
||||
package runtime
|
||||
|
||||
2
vendor/github.com/docker/docker/api/types/swarm/secret.go
generated
vendored
2
vendor/github.com/docker/docker/api/types/swarm/secret.go
generated
vendored
@ -1,4 +1,4 @@
|
||||
package swarm // import "github.com/docker/docker/api/types/swarm"
|
||||
package swarm
|
||||
|
||||
import (
|
||||
"os"
|
||||
|
||||
2
vendor/github.com/docker/docker/api/types/swarm/service.go
generated
vendored
2
vendor/github.com/docker/docker/api/types/swarm/service.go
generated
vendored
@ -1,4 +1,4 @@
|
||||
package swarm // import "github.com/docker/docker/api/types/swarm"
|
||||
package swarm
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
2
vendor/github.com/docker/docker/api/types/swarm/swarm.go
generated
vendored
2
vendor/github.com/docker/docker/api/types/swarm/swarm.go
generated
vendored
@ -1,4 +1,4 @@
|
||||
package swarm // import "github.com/docker/docker/api/types/swarm"
|
||||
package swarm
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
2
vendor/github.com/docker/docker/api/types/swarm/task.go
generated
vendored
2
vendor/github.com/docker/docker/api/types/swarm/task.go
generated
vendored
@ -1,4 +1,4 @@
|
||||
package swarm // import "github.com/docker/docker/api/types/swarm"
|
||||
package swarm
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
2
vendor/github.com/docker/docker/api/types/time/timestamp.go
generated
vendored
2
vendor/github.com/docker/docker/api/types/time/timestamp.go
generated
vendored
@ -1,4 +1,4 @@
|
||||
package time // import "github.com/docker/docker/api/types/time"
|
||||
package time
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
2
vendor/github.com/docker/docker/api/types/types.go
generated
vendored
2
vendor/github.com/docker/docker/api/types/types.go
generated
vendored
@ -1,4 +1,4 @@
|
||||
package types // import "github.com/docker/docker/api/types"
|
||||
package types
|
||||
|
||||
import (
|
||||
"github.com/docker/docker/api/types/build"
|
||||
|
||||
2
vendor/github.com/docker/docker/api/types/versions/compare.go
generated
vendored
2
vendor/github.com/docker/docker/api/types/versions/compare.go
generated
vendored
@ -1,4 +1,4 @@
|
||||
package versions // import "github.com/docker/docker/api/types/versions"
|
||||
package versions
|
||||
|
||||
import (
|
||||
"strconv"
|
||||
|
||||
2
vendor/github.com/docker/docker/api/types/volume/options.go
generated
vendored
2
vendor/github.com/docker/docker/api/types/volume/options.go
generated
vendored
@ -1,4 +1,4 @@
|
||||
package volume // import "github.com/docker/docker/api/types/volume"
|
||||
package volume
|
||||
|
||||
import "github.com/docker/docker/api/types/filters"
|
||||
|
||||
|
||||
2
vendor/github.com/docker/docker/api/types/volume/volume_update.go
generated
vendored
2
vendor/github.com/docker/docker/api/types/volume/volume_update.go
generated
vendored
@ -1,4 +1,4 @@
|
||||
package volume // import "github.com/docker/docker/api/types/volume"
|
||||
package volume
|
||||
|
||||
// UpdateOptions is configuration to update a Volume with.
|
||||
type UpdateOptions struct {
|
||||
|
||||
2
vendor/github.com/docker/docker/builder/remotecontext/git/gitutils.go
generated
vendored
2
vendor/github.com/docker/docker/builder/remotecontext/git/gitutils.go
generated
vendored
@ -1,4 +1,4 @@
|
||||
package git // import "github.com/docker/docker/builder/remotecontext/git"
|
||||
package git
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
2
vendor/github.com/docker/docker/builder/remotecontext/urlutil/urlutil.go
generated
vendored
2
vendor/github.com/docker/docker/builder/remotecontext/urlutil/urlutil.go
generated
vendored
@ -3,7 +3,7 @@
|
||||
//
|
||||
// This package is specifically written for use with docker build contexts, and
|
||||
// should not be used as a general-purpose utility.
|
||||
package urlutil // import "github.com/docker/docker/builder/remotecontext/urlutil"
|
||||
package urlutil
|
||||
|
||||
import (
|
||||
"strings"
|
||||
|
||||
2
vendor/github.com/docker/docker/client/build_cancel.go
generated
vendored
2
vendor/github.com/docker/docker/client/build_cancel.go
generated
vendored
@ -1,4 +1,4 @@
|
||||
package client // import "github.com/docker/docker/client"
|
||||
package client
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
2
vendor/github.com/docker/docker/client/build_prune.go
generated
vendored
2
vendor/github.com/docker/docker/client/build_prune.go
generated
vendored
@ -1,4 +1,4 @@
|
||||
package client // import "github.com/docker/docker/client"
|
||||
package client
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
2
vendor/github.com/docker/docker/client/checkpoint.go
generated
vendored
2
vendor/github.com/docker/docker/client/checkpoint.go
generated
vendored
@ -1,4 +1,4 @@
|
||||
package client // import "github.com/docker/docker/client"
|
||||
package client
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
2
vendor/github.com/docker/docker/client/checkpoint_create.go
generated
vendored
2
vendor/github.com/docker/docker/client/checkpoint_create.go
generated
vendored
@ -1,4 +1,4 @@
|
||||
package client // import "github.com/docker/docker/client"
|
||||
package client
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
2
vendor/github.com/docker/docker/client/checkpoint_delete.go
generated
vendored
2
vendor/github.com/docker/docker/client/checkpoint_delete.go
generated
vendored
@ -1,4 +1,4 @@
|
||||
package client // import "github.com/docker/docker/client"
|
||||
package client
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
2
vendor/github.com/docker/docker/client/checkpoint_list.go
generated
vendored
2
vendor/github.com/docker/docker/client/checkpoint_list.go
generated
vendored
@ -1,4 +1,4 @@
|
||||
package client // import "github.com/docker/docker/client"
|
||||
package client
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
2
vendor/github.com/docker/docker/client/client.go
generated
vendored
2
vendor/github.com/docker/docker/client/client.go
generated
vendored
@ -39,7 +39,7 @@ For example, to list running containers (the equivalent of "docker ps"):
|
||||
}
|
||||
}
|
||||
*/
|
||||
package client // import "github.com/docker/docker/client"
|
||||
package client
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
2
vendor/github.com/docker/docker/client/client_interfaces.go
generated
vendored
2
vendor/github.com/docker/docker/client/client_interfaces.go
generated
vendored
@ -1,4 +1,4 @@
|
||||
package client // import "github.com/docker/docker/client"
|
||||
package client
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
2
vendor/github.com/docker/docker/client/client_unix.go
generated
vendored
2
vendor/github.com/docker/docker/client/client_unix.go
generated
vendored
@ -1,6 +1,6 @@
|
||||
//go:build !windows
|
||||
|
||||
package client // import "github.com/docker/docker/client"
|
||||
package client
|
||||
|
||||
// DefaultDockerHost defines OS-specific default host if the DOCKER_HOST
|
||||
// (EnvOverrideHost) environment variable is unset or empty.
|
||||
|
||||
2
vendor/github.com/docker/docker/client/client_windows.go
generated
vendored
2
vendor/github.com/docker/docker/client/client_windows.go
generated
vendored
@ -1,4 +1,4 @@
|
||||
package client // import "github.com/docker/docker/client"
|
||||
package client
|
||||
|
||||
// DefaultDockerHost defines OS-specific default host if the DOCKER_HOST
|
||||
// (EnvOverrideHost) environment variable is unset or empty.
|
||||
|
||||
2
vendor/github.com/docker/docker/client/config_create.go
generated
vendored
2
vendor/github.com/docker/docker/client/config_create.go
generated
vendored
@ -1,4 +1,4 @@
|
||||
package client // import "github.com/docker/docker/client"
|
||||
package client
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
2
vendor/github.com/docker/docker/client/config_inspect.go
generated
vendored
2
vendor/github.com/docker/docker/client/config_inspect.go
generated
vendored
@ -1,4 +1,4 @@
|
||||
package client // import "github.com/docker/docker/client"
|
||||
package client
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
|
||||
2
vendor/github.com/docker/docker/client/config_list.go
generated
vendored
2
vendor/github.com/docker/docker/client/config_list.go
generated
vendored
@ -1,4 +1,4 @@
|
||||
package client // import "github.com/docker/docker/client"
|
||||
package client
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
2
vendor/github.com/docker/docker/client/config_remove.go
generated
vendored
2
vendor/github.com/docker/docker/client/config_remove.go
generated
vendored
@ -1,4 +1,4 @@
|
||||
package client // import "github.com/docker/docker/client"
|
||||
package client
|
||||
|
||||
import "context"
|
||||
|
||||
|
||||
2
vendor/github.com/docker/docker/client/config_update.go
generated
vendored
2
vendor/github.com/docker/docker/client/config_update.go
generated
vendored
@ -1,4 +1,4 @@
|
||||
package client // import "github.com/docker/docker/client"
|
||||
package client
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
2
vendor/github.com/docker/docker/client/container_attach.go
generated
vendored
2
vendor/github.com/docker/docker/client/container_attach.go
generated
vendored
@ -1,4 +1,4 @@
|
||||
package client // import "github.com/docker/docker/client"
|
||||
package client
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
2
vendor/github.com/docker/docker/client/container_commit.go
generated
vendored
2
vendor/github.com/docker/docker/client/container_commit.go
generated
vendored
@ -1,4 +1,4 @@
|
||||
package client // import "github.com/docker/docker/client"
|
||||
package client
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
2
vendor/github.com/docker/docker/client/container_copy.go
generated
vendored
2
vendor/github.com/docker/docker/client/container_copy.go
generated
vendored
@ -1,4 +1,4 @@
|
||||
package client // import "github.com/docker/docker/client"
|
||||
package client
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
2
vendor/github.com/docker/docker/client/container_create.go
generated
vendored
2
vendor/github.com/docker/docker/client/container_create.go
generated
vendored
@ -1,4 +1,4 @@
|
||||
package client // import "github.com/docker/docker/client"
|
||||
package client
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
2
vendor/github.com/docker/docker/client/container_diff.go
generated
vendored
2
vendor/github.com/docker/docker/client/container_diff.go
generated
vendored
@ -1,4 +1,4 @@
|
||||
package client // import "github.com/docker/docker/client"
|
||||
package client
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
2
vendor/github.com/docker/docker/client/container_exec.go
generated
vendored
2
vendor/github.com/docker/docker/client/container_exec.go
generated
vendored
@ -1,4 +1,4 @@
|
||||
package client // import "github.com/docker/docker/client"
|
||||
package client
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
2
vendor/github.com/docker/docker/client/container_export.go
generated
vendored
2
vendor/github.com/docker/docker/client/container_export.go
generated
vendored
@ -1,4 +1,4 @@
|
||||
package client // import "github.com/docker/docker/client"
|
||||
package client
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
2
vendor/github.com/docker/docker/client/container_inspect.go
generated
vendored
2
vendor/github.com/docker/docker/client/container_inspect.go
generated
vendored
@ -1,4 +1,4 @@
|
||||
package client // import "github.com/docker/docker/client"
|
||||
package client
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
|
||||
2
vendor/github.com/docker/docker/client/container_kill.go
generated
vendored
2
vendor/github.com/docker/docker/client/container_kill.go
generated
vendored
@ -1,4 +1,4 @@
|
||||
package client // import "github.com/docker/docker/client"
|
||||
package client
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
2
vendor/github.com/docker/docker/client/container_list.go
generated
vendored
2
vendor/github.com/docker/docker/client/container_list.go
generated
vendored
@ -1,4 +1,4 @@
|
||||
package client // import "github.com/docker/docker/client"
|
||||
package client
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
2
vendor/github.com/docker/docker/client/container_logs.go
generated
vendored
2
vendor/github.com/docker/docker/client/container_logs.go
generated
vendored
@ -1,4 +1,4 @@
|
||||
package client // import "github.com/docker/docker/client"
|
||||
package client
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
2
vendor/github.com/docker/docker/client/container_pause.go
generated
vendored
2
vendor/github.com/docker/docker/client/container_pause.go
generated
vendored
@ -1,4 +1,4 @@
|
||||
package client // import "github.com/docker/docker/client"
|
||||
package client
|
||||
|
||||
import "context"
|
||||
|
||||
|
||||
2
vendor/github.com/docker/docker/client/container_prune.go
generated
vendored
2
vendor/github.com/docker/docker/client/container_prune.go
generated
vendored
@ -1,4 +1,4 @@
|
||||
package client // import "github.com/docker/docker/client"
|
||||
package client
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
2
vendor/github.com/docker/docker/client/container_remove.go
generated
vendored
2
vendor/github.com/docker/docker/client/container_remove.go
generated
vendored
@ -1,4 +1,4 @@
|
||||
package client // import "github.com/docker/docker/client"
|
||||
package client
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user