Created
September 16, 2022 07:18
-
-
Save m-wrona/4c0bdede97fe2e34b9130ab2a95e41dc to your computer and use it in GitHub Desktop.
Golang - using docker CLI without OS dependencies
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package docker | |
import ( | |
"os" | |
"github.com/docker/cli/cli-plugins/plugin" | |
"github.com/pkg/errors" | |
"github.com/docker/compose/v2/cmd/compatibility" | |
dockercli "github.com/docker/cli/cli" | |
"github.com/docker/cli/cli-plugins/manager" | |
"github.com/docker/cli/cli/command" | |
commands "github.com/docker/compose/v2/cmd/compose" | |
"github.com/docker/compose/v2/pkg/api" | |
"github.com/docker/compose/v2/pkg/compose" | |
"github.com/spf13/cobra" | |
) | |
func RunDockerCLI(args ...string) error { | |
if len(args) == 0 { | |
return errors.New("no docker args given") | |
} else if args[0] == "docker" { | |
return errors.New("docker CLI name not required as first param") | |
} | |
args = append([]string{"docker"}, compatibility.Convert(args)...) | |
os.Args = args | |
plugin.Run( | |
func(dockerCli command.Cli) *cobra.Command { | |
lazyInit := api.NewServiceProxy() | |
cmd := commands.RootCommand(dockerCli, lazyInit) | |
originalPreRun := cmd.PersistentPreRunE | |
cmd.PersistentPreRunE = func(cmd *cobra.Command, args []string) error { | |
if err := plugin.PersistentPreRunE(cmd, args); err != nil { | |
return err | |
} | |
lazyInit.WithService(compose.NewComposeService(dockerCli)) | |
if originalPreRun != nil { | |
return originalPreRun(cmd, args) | |
} | |
return nil | |
} | |
cmd.SetFlagErrorFunc(func(c *cobra.Command, err error) error { | |
return dockercli.StatusError{ | |
StatusCode: compose.CommandSyntaxFailure.ExitCode, | |
Status: err.Error(), | |
} | |
}) | |
return cmd | |
}, | |
manager.Metadata{ | |
SchemaVersion: "3.x", | |
Vendor: "CPO Team", | |
Version: "test", | |
}, | |
) | |
return nil | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
module gitlab.newmotion.com/cpo/go-docker-test | |
go 1.18 | |
require ( | |
github.com/Shopify/toxiproxy v2.1.4+incompatible | |
github.com/awslabs/amazon-ecr-credential-helper/ecr-login v0.0.0-20220228164355-396b2034c795 | |
github.com/cenkalti/backoff/v4 v4.1.3 | |
github.com/cnabio/cnab-go v0.24.1-0.20220907172316-1ca5c8721bf7 | |
github.com/compose-spec/compose-go v1.5.0 | |
github.com/docker/cli v20.10.17+incompatible | |
github.com/docker/compose/v2 v2.10.2 | |
github.com/docker/docker v20.10.17+incompatible | |
github.com/docker/docker-credential-helpers v0.6.4 | |
github.com/google/uuid v1.3.0 | |
github.com/jackc/pgx/v4 v4.15.0 | |
github.com/jmoiron/sqlx v1.3.4 | |
github.com/kelseyhightower/envconfig v1.4.0 | |
github.com/ory/dockertest/v3 v3.8.1 | |
github.com/pkg/errors v0.9.1 | |
github.com/spf13/cobra v1.5.0 | |
github.com/stretchr/testify v1.8.0 | |
github.com/testcontainers/testcontainers-go v0.14.0 | |
gitlab.newmotion.com/cpo/go-commons v0.1.7 | |
gitlab.newmotion.com/cpo/protos v0.1.0 | |
go.uber.org/zap v1.21.0 | |
google.golang.org/grpc v1.47.0 | |
gopkg.in/DataDog/dd-trace-go.v1 v1.38.1 | |
) | |
require ( | |
github.com/AlecAivazis/survey/v2 v2.3.5 // indirect | |
github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect | |
github.com/DataDog/datadog-agent/pkg/obfuscate v0.0.0-20211129110424-6491aa3bf583 // indirect | |
github.com/DataDog/datadog-go v4.8.2+incompatible // indirect | |
github.com/DataDog/datadog-go/v5 v5.0.2 // indirect | |
github.com/DataDog/datadog-lambda-go v1.4.0 // indirect | |
github.com/DataDog/gostackparse v0.5.0 // indirect | |
github.com/DataDog/sketches-go v1.0.0 // indirect | |
github.com/Masterminds/semver v1.5.0 // indirect | |
github.com/Microsoft/go-winio v0.5.2 // indirect | |
github.com/Microsoft/hcsshim v0.9.4 // indirect | |
github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 // indirect | |
github.com/andybalholm/brotli v1.0.2 // indirect | |
github.com/aws/aws-lambda-go v1.25.0 // indirect | |
github.com/aws/aws-sdk-go v1.43.16 // indirect | |
github.com/aws/aws-sdk-go-v2 v1.7.1 // indirect | |
github.com/aws/aws-sdk-go-v2/config v1.5.0 // indirect | |
github.com/aws/aws-sdk-go-v2/credentials v1.3.1 // indirect | |
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.3.0 // indirect | |
github.com/aws/aws-sdk-go-v2/internal/ini v1.1.1 // indirect | |
github.com/aws/aws-sdk-go-v2/service/ecr v1.4.1 // indirect | |
github.com/aws/aws-sdk-go-v2/service/ecrpublic v1.4.1 // indirect | |
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.2.1 // indirect | |
github.com/aws/aws-sdk-go-v2/service/sso v1.3.1 // indirect | |
github.com/aws/aws-sdk-go-v2/service/sts v1.6.0 // indirect | |
github.com/aws/aws-xray-sdk-go v1.6.0 // indirect | |
github.com/aws/smithy-go v1.11.0 // indirect | |
github.com/beorn7/perks v1.0.1 // indirect | |
github.com/buger/goterm v1.0.4 // indirect | |
github.com/cenkalti/backoff v2.2.1+incompatible // indirect | |
github.com/cespare/xxhash/v2 v2.1.2 // indirect | |
github.com/cnabio/cnab-to-oci v0.3.7 // indirect | |
github.com/containerd/cgroups v1.0.4 // indirect | |
github.com/containerd/console v1.0.3 // indirect | |
github.com/containerd/containerd v1.6.8 // indirect | |
github.com/containerd/continuity v0.3.0 // indirect | |
github.com/containerd/ttrpc v1.1.0 // indirect | |
github.com/containerd/typeurl v1.0.2 // indirect | |
github.com/cyberphone/json-canonicalization v0.0.0-20210303052042-6bc126869bf4 // indirect | |
github.com/davecgh/go-spew v1.1.1 // indirect | |
github.com/dgraph-io/ristretto v0.1.0 // indirect | |
github.com/distribution/distribution/v3 v3.0.0-20220729163034-26163d82560f // indirect | |
github.com/docker/buildx v0.8.2 // indirect | |
github.com/docker/distribution v2.8.1+incompatible // indirect | |
github.com/docker/go v1.5.1-1.0.20160303222718-d30aec9fd63c // indirect | |
github.com/docker/go-connections v0.4.0 // indirect | |
github.com/docker/go-metrics v0.0.1 // indirect | |
github.com/docker/go-units v0.5.0 // indirect | |
github.com/dustin/go-humanize v1.0.0 // indirect | |
github.com/felixge/httpsnoop v1.0.2 // indirect | |
github.com/fvbommel/sortorder v1.0.2 // indirect | |
github.com/go-logr/logr v1.2.2 // indirect | |
github.com/go-logr/stdr v1.2.2 // indirect | |
github.com/gofrs/flock v0.8.0 // indirect | |
github.com/gogo/googleapis v1.4.1 // indirect | |
github.com/gogo/protobuf v1.3.2 // indirect | |
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b // indirect | |
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect | |
github.com/golang/mock v1.6.0 // indirect | |
github.com/golang/protobuf v1.5.2 // indirect | |
github.com/google/gofuzz v1.2.0 // indirect | |
github.com/google/pprof v0.0.0-20210423192551-a2663126120b // indirect | |
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect | |
github.com/gorilla/mux v1.8.0 // indirect | |
github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 // indirect | |
github.com/grpc-ecosystem/grpc-gateway v1.16.0 // indirect | |
github.com/hashicorp/errwrap v1.1.0 // indirect | |
github.com/hashicorp/go-multierror v1.1.1 // indirect | |
github.com/hashicorp/go-version v1.6.0 // indirect | |
github.com/imdario/mergo v0.3.13 // indirect | |
github.com/inconshreveable/mousetrap v1.0.0 // indirect | |
github.com/jackc/chunkreader/v2 v2.0.1 // indirect | |
github.com/jackc/pgconn v1.11.0 // indirect | |
github.com/jackc/pgio v1.0.0 // indirect | |
github.com/jackc/pgpassfile v1.0.0 // indirect | |
github.com/jackc/pgproto3/v2 v2.2.0 // indirect | |
github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b // indirect | |
github.com/jackc/pgtype v1.10.0 // indirect | |
github.com/jmespath/go-jmespath v0.4.0 // indirect | |
github.com/josharian/intern v1.0.0 // indirect | |
github.com/json-iterator/go v1.1.12 // indirect | |
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect | |
github.com/klauspost/compress v1.15.1 // indirect | |
github.com/magiconair/properties v1.8.6 // indirect | |
github.com/mailru/easyjson v0.7.7 // indirect | |
github.com/mattn/go-colorable v0.1.12 // indirect | |
github.com/mattn/go-isatty v0.0.16 // indirect | |
github.com/mattn/go-shellwords v1.0.12 // indirect | |
github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect | |
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b // indirect | |
github.com/miekg/pkcs11 v1.1.1 // indirect | |
github.com/mitchellh/copystructure v1.0.0 // indirect | |
github.com/mitchellh/go-homedir v1.1.0 // indirect | |
github.com/mitchellh/mapstructure v1.5.0 // indirect | |
github.com/mitchellh/reflectwalk v1.0.0 // indirect | |
github.com/moby/buildkit v0.10.4 // indirect | |
github.com/moby/locker v1.0.1 // indirect | |
github.com/moby/sys/mount v0.3.3 // indirect | |
github.com/moby/sys/mountinfo v0.6.2 // indirect | |
github.com/moby/sys/signal v0.6.0 // indirect | |
github.com/moby/sys/symlink v0.2.0 // indirect | |
github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6 // indirect | |
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect | |
github.com/modern-go/reflect2 v1.0.2 // indirect | |
github.com/morikuni/aec v1.0.0 // indirect | |
github.com/mrunalp/fileutils v0.5.0 // indirect | |
github.com/opencontainers/go-digest v1.0.0 // indirect | |
github.com/opencontainers/image-spec v1.0.3-0.20211202183452-c5a74bcca799 // indirect | |
github.com/opencontainers/runc v1.1.3 // indirect | |
github.com/pelletier/go-toml v1.9.4 // indirect | |
github.com/philhofer/fwd v1.1.1 // indirect | |
github.com/pmezard/go-difflib v1.0.0 // indirect | |
github.com/prometheus/client_golang v1.12.1 // indirect | |
github.com/prometheus/client_model v0.2.0 // indirect | |
github.com/prometheus/common v0.32.1 // indirect | |
github.com/prometheus/procfs v0.7.3 // indirect | |
github.com/qri-io/jsonpointer v0.1.1 // indirect | |
github.com/qri-io/jsonschema v0.2.2-0.20210831022256-780655b2ba0e // indirect | |
github.com/segmentio/ksuid v1.0.4 // indirect | |
github.com/sirupsen/logrus v1.9.0 // indirect | |
github.com/sony/gobreaker v0.4.1 // indirect | |
github.com/spf13/pflag v1.0.5 // indirect | |
github.com/theupdateframework/notary v0.7.0 // indirect | |
github.com/tinylib/msgp v1.1.2 // indirect | |
github.com/tonistiigi/fsutil v0.0.0-20220315205639-9ed612626da3 // indirect | |
github.com/tonistiigi/go-rosetta v0.0.0-20220804170347-3f4430f2d346 // indirect | |
github.com/tonistiigi/units v0.0.0-20180711220420-6950e57a87ea // indirect | |
github.com/tonistiigi/vt100 v0.0.0-20210615222946-8066bb97264f // indirect | |
github.com/valyala/bytebufferpool v1.0.0 // indirect | |
github.com/valyala/fasthttp v1.32.0 // indirect | |
github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect | |
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect | |
github.com/xeipuuv/gojsonschema v1.2.0 // indirect | |
go.opencensus.io v0.23.0 // indirect | |
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.29.0 // indirect | |
go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.29.0 // indirect | |
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.29.0 // indirect | |
go.opentelemetry.io/otel v1.4.1 // indirect | |
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.4.1 // indirect | |
go.opentelemetry.io/otel/internal/metric v0.27.0 // indirect | |
go.opentelemetry.io/otel/metric v0.27.0 // indirect | |
go.opentelemetry.io/otel/sdk v1.4.1 // indirect | |
go.opentelemetry.io/otel/trace v1.4.1 // indirect | |
go.opentelemetry.io/proto/otlp v0.12.0 // indirect | |
go.uber.org/atomic v1.7.0 // indirect | |
go.uber.org/multierr v1.6.0 // indirect | |
golang.org/x/crypto v0.0.0-20220214200702-86341886e292 // indirect | |
golang.org/x/net v0.0.0-20220617184016-355a448f1bc9 // indirect | |
golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 // indirect | |
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 // indirect | |
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab // indirect | |
golang.org/x/term v0.0.0-20220526004731-065cf7ba2467 // indirect | |
golang.org/x/text v0.3.7 // indirect | |
golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 // indirect | |
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect | |
google.golang.org/appengine v1.6.7 // indirect | |
google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad // indirect | |
google.golang.org/protobuf v1.28.0 // indirect | |
gopkg.in/inf.v0 v0.9.1 // indirect | |
gopkg.in/yaml.v2 v2.4.0 // indirect | |
gopkg.in/yaml.v3 v3.0.1 // indirect | |
k8s.io/apimachinery v0.24.1 // indirect | |
k8s.io/client-go v0.24.1 // indirect | |
k8s.io/klog/v2 v2.60.1 // indirect | |
k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9 // indirect | |
sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2 // indirect | |
sigs.k8s.io/structured-merge-diff/v4 v4.2.1 // indirect | |
sigs.k8s.io/yaml v1.2.0 // indirect | |
) | |
replace ( | |
github.com/docker/cli => github.com/docker/cli v20.10.3-0.20220309205733-2b52f62e9627+incompatible | |
github.com/docker/docker => github.com/docker/docker v20.10.3-0.20220309172631-83b51522df43+incompatible | |
) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment