Skip to content

Commit db01f8b

Browse files
committed
feat: add support for docker go-sdk client
1 parent 0d41ecb commit db01f8b

7 files changed

Lines changed: 270 additions & 20 deletions

File tree

examples/podman/main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ func main() {
1919
}
2020
println("Is Podman:", isPodman)
2121
if isPodman {
22-
podmanCli, err := client2.FromDocker(context.Background(), cli, nil, nil)
22+
podmanCli, err := client2.FromDocker(context.Background(), cli)
2323
if err != nil {
2424
panic(err)
2525
}

examples/sdk/main.go

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
package main
2+
3+
import (
4+
"context"
5+
"time"
6+
7+
"github.com/docker/docker/api/types/registry"
8+
client2 "github.com/docker/docker/client"
9+
"github.com/docker/go-sdk/container"
10+
"github.com/docker/go-sdk/image"
11+
"github.com/silenium-dev/docker-wrapper/pkg/client"
12+
"github.com/silenium-dev/docker-wrapper/pkg/client/provider"
13+
"github.com/silenium-dev/docker-wrapper/pkg/client/stream"
14+
"go.uber.org/zap"
15+
)
16+
17+
func main() {
18+
logger := zap.Must(zap.NewDevelopment()).Sugar()
19+
authProvider, err := provider.NewDefaultAuthProvider()
20+
if err != nil {
21+
panic(err)
22+
}
23+
override := provider.NewOverridingAuthProvider(
24+
authProvider, map[string]registry.AuthConfig{},
25+
provider.WithSugaredLogger(logger.With(zap.String("component", "auth-provider"))),
26+
).WithOverride("quay.io", registry.AuthConfig{})
27+
cli, err := client.NewWithOpts(
28+
client.WithAuthProvider(override),
29+
client.FromEnv,
30+
client.WithVersionNegotiation,
31+
client.WithDockerOpts(client2.WithTimeout(time.Hour*1)),
32+
client.WithSugaredLogger(logger.With(zap.String("component", "docker-client"))),
33+
)
34+
if err != nil {
35+
panic(err)
36+
}
37+
err = image.Pull(context.Background(), "localstack/localstack:4", image.WithPullClient(cli.SdkClient()))
38+
if err != nil {
39+
panic(err)
40+
}
41+
cont, err := container.Run(
42+
context.Background(),
43+
container.WithName("test"),
44+
container.WithImage("localstack/localstack:4"),
45+
container.WithNoStart(),
46+
)
47+
if err != nil {
48+
panic(err)
49+
}
50+
err = cont.Start(context.Background())
51+
if err != nil {
52+
panic(err)
53+
}
54+
exitCode, reader, err := cont.Exec(context.Background(), []string{"echo", "hello world"})
55+
if err != nil {
56+
panic(err)
57+
}
58+
println("exit-code", exitCode)
59+
multiplexed := stream.NewMultiplexedStream(context.Background(), reader, nil, nil, true, logger)
60+
done := false
61+
for !done {
62+
select {
63+
case msg, ok := <-multiplexed.Messages():
64+
if ok {
65+
print(msg.StreamType.Name(), ": ", string(msg.Content))
66+
}
67+
case <-multiplexed.Done():
68+
done = true
69+
println("done")
70+
}
71+
}
72+
err = cont.Terminate(context.Background(), container.TerminateTimeout(1*time.Second))
73+
if err != nil {
74+
panic(err)
75+
}
76+
}

go.mod

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ require (
88
github.com/BurntSushi/toml v1.5.0
99
github.com/Microsoft/go-winio v0.6.2
1010
github.com/blang/semver/v4 v4.0.0
11+
github.com/caarlos0/env/v11 v11.3.1
1112
github.com/containerd/errdefs v1.0.0
1213
github.com/containerd/platforms v1.0.0-rc.1
1314
github.com/containers/common v0.64.1
@@ -16,6 +17,8 @@ require (
1617
github.com/cpuguy83/dockercfg v0.3.2
1718
github.com/distribution/reference v0.6.0
1819
github.com/docker/docker v28.3.3+incompatible
20+
github.com/docker/go-sdk/client v0.1.0-alpha009
21+
github.com/docker/go-sdk/image v0.1.0-alpha009
1922
github.com/docker/go-units v0.5.0
2023
github.com/google/go-containerregistry v0.20.6
2124
github.com/hashicorp/go-multierror v1.1.1
@@ -32,44 +35,56 @@ require (
3235
go.uber.org/zap v1.27.0
3336
golang.org/x/crypto v0.40.0
3437
golang.org/x/net v0.42.0
35-
golang.org/x/sys v0.34.0
38+
golang.org/x/sys v0.35.0
3639
golang.org/x/term v0.33.0
3740
k8s.io/apimachinery v0.33.3
3841
tags.cncf.io/container-device-interface v1.0.1
3942
)
4043

4144
require (
45+
github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c // indirect
46+
github.com/cenkalti/backoff/v4 v4.3.0 // indirect
4247
github.com/containerd/errdefs/pkg v0.3.0 // indirect
4348
github.com/containerd/log v0.1.0 // indirect
4449
github.com/containerd/stargz-snapshotter/estargz v0.17.0 // indirect
4550
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
4651
github.com/docker/cli v28.3.3+incompatible // indirect
4752
github.com/docker/distribution v2.8.3+incompatible // indirect
4853
github.com/docker/docker-credential-helpers v0.9.3 // indirect
49-
github.com/docker/go-connections v0.5.0 // indirect
54+
github.com/docker/go-connections v0.6.0 // indirect
55+
github.com/docker/go-sdk/config v0.1.0-alpha009 // indirect
56+
github.com/docker/go-sdk/container v0.1.0-alpha009 // indirect
57+
github.com/docker/go-sdk/context v0.1.0-alpha009 // indirect
58+
github.com/docker/go-sdk/network v0.1.0-alpha009 // indirect
5059
github.com/felixge/httpsnoop v1.0.4 // indirect
5160
github.com/go-logr/logr v1.4.3 // indirect
5261
github.com/go-logr/stdr v1.2.2 // indirect
5362
github.com/gogo/protobuf v1.3.2 // indirect
63+
github.com/google/uuid v1.6.0 // indirect
5464
github.com/hashicorp/errwrap v1.1.0 // indirect
5565
github.com/klauspost/compress v1.18.0 // indirect
5666
github.com/kr/fs v0.1.0 // indirect
5767
github.com/mitchellh/go-homedir v1.1.0 // indirect
5868
github.com/moby/docker-image-spec v1.3.1 // indirect
69+
github.com/moby/go-archive v0.1.0 // indirect
70+
github.com/moby/patternmatcher v0.6.0 // indirect
5971
github.com/moby/sys/mountinfo v0.7.2 // indirect
72+
github.com/moby/sys/sequential v0.6.0 // indirect
6073
github.com/moby/sys/user v0.4.0 // indirect
74+
github.com/moby/sys/userns v0.1.0 // indirect
75+
github.com/moby/term v0.5.2 // indirect
76+
github.com/morikuni/aec v1.0.0 // indirect
6177
github.com/pkg/errors v0.9.1 // indirect
6278
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
6379
github.com/vbatts/tar-split v0.12.1 // indirect
6480
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
6581
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.62.0 // indirect
6682
go.opentelemetry.io/otel v1.37.0 // indirect
67-
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.37.0 // indirect
68-
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.35.0 // indirect
6983
go.opentelemetry.io/otel/metric v1.37.0 // indirect
7084
go.opentelemetry.io/otel/trace v1.37.0 // indirect
7185
go.opentelemetry.io/proto/otlp v1.7.1 // indirect
7286
go.uber.org/multierr v1.11.0 // indirect
87+
go.uber.org/zap/exp v0.3.0 // indirect
7388
golang.org/x/sync v0.16.0 // indirect
7489
golang.org/x/time v0.12.0 // indirect
7590
google.golang.org/genproto/googleapis/api v0.0.0-20250804133106-a7a43d27e69b // indirect

go.sum

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
github.com/AdaLogics/go-fuzz-headers v0.0.0-20240806141605-e8a1dd7889d6 h1:He8afgbRMd7mFxO99hRNu+6tazq8nFF9lIwo9JFroBk=
2+
github.com/AdaLogics/go-fuzz-headers v0.0.0-20240806141605-e8a1dd7889d6/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8=
13
github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c h1:udKWzYgxTojEKWjV8V+WSxDXJ4NFATAsZjh8iIbsQIg=
24
github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
35
github.com/BurntSushi/toml v1.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg=
@@ -6,8 +8,14 @@ github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERo
68
github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU=
79
github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM=
810
github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ=
11+
github.com/caarlos0/env/v11 v11.3.1 h1:cArPWC15hWmEt+gWk7YBi7lEXTXCvpaSdCiZE2X5mCA=
12+
github.com/caarlos0/env/v11 v11.3.1/go.mod h1:qupehSf/Y0TUTsxKywqRt/vJjN5nz6vauiYEUUr8P4U=
13+
github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
14+
github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
915
github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
1016
github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
17+
github.com/cenkalti/backoff/v5 v5.0.2 h1:rIfFVxEf1QsI7E1ZHfp/B4DF/6QBAUhmgkxc0H7Zss8=
18+
github.com/cenkalti/backoff/v5 v5.0.2/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw=
1119
github.com/containerd/errdefs v1.0.0 h1:tg5yIfIlQIrxYtu9ajqY42W3lpS19XqdxRQeEwYG8PI=
1220
github.com/containerd/errdefs v1.0.0/go.mod h1:+YBYIdtsnF4Iw6nWZhJcqGSg/dwvV7tyJ/kCkyJ2k+M=
1321
github.com/containerd/errdefs/pkg v0.3.0 h1:9IKJ06FvyNlexW690DXuQNx2KA2cUJXx151Xdx3ZPPE=
@@ -26,6 +34,8 @@ github.com/containers/storage v1.59.1 h1:11Zu68MXsEQGBBd+GadPrHPpWeqjKS8hJDGiAHg
2634
github.com/containers/storage v1.59.1/go.mod h1:KoAYHnAjP3/cTsRS+mmWZGkufSY2GACiKQ4V3ZLQnR0=
2735
github.com/cpuguy83/dockercfg v0.3.2 h1:DlJTyZGBDlXqUZ2Dk2Q3xHs/FtnooJJVaad2S9GKorA=
2836
github.com/cpuguy83/dockercfg v0.3.2/go.mod h1:sugsbF4//dDlL/i+S+rtpIWp+5h0BHJHfjj5/jFyUJc=
37+
github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY=
38+
github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4=
2939
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
3040
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
3141
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
@@ -42,6 +52,20 @@ github.com/docker/docker-credential-helpers v0.9.3 h1:gAm/VtF9wgqJMoxzT3Gj5p4AqI
4252
github.com/docker/docker-credential-helpers v0.9.3/go.mod h1:x+4Gbw9aGmChi3qTLZj8Dfn0TD20M/fuWy0E5+WDeCo=
4353
github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c=
4454
github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc=
55+
github.com/docker/go-connections v0.6.0 h1:LlMG9azAe1TqfR7sO+NJttz1gy6KO7VJBh+pMmjSD94=
56+
github.com/docker/go-connections v0.6.0/go.mod h1:AahvXYshr6JgfUJGdDCs2b5EZG/vmaMAntpSFH5BFKE=
57+
github.com/docker/go-sdk/client v0.1.0-alpha009 h1:7IKRNOKChT99s33UuEBYdzOStToMSznxEz3VOpiqobc=
58+
github.com/docker/go-sdk/client v0.1.0-alpha009/go.mod h1:nIDGWTv9QeLI+6dPDMIuXi0S2bd8UNks4O5J1ogvSFA=
59+
github.com/docker/go-sdk/config v0.1.0-alpha009 h1:3FiWk7qVGvIfz+Ds4smFkIiopjQjs5xuoncYn8xQWVQ=
60+
github.com/docker/go-sdk/config v0.1.0-alpha009/go.mod h1:2lhg2sMZMKTtBVrsTG2Hn9P0dXMp1weecaJrE7OtNDM=
61+
github.com/docker/go-sdk/container v0.1.0-alpha009 h1:bnF27tGNtmQERutVlCj/9V498abt04JGv1AUoVFdNGc=
62+
github.com/docker/go-sdk/container v0.1.0-alpha009/go.mod h1:SdvWPh/yjcdSSLajMeuVsT0AIlu9QVDCx/EETHznL7k=
63+
github.com/docker/go-sdk/context v0.1.0-alpha009 h1:N5k3usl4EIxMC8LgYZjFt5DwesOzyiflXRZ4Yw3aEgc=
64+
github.com/docker/go-sdk/context v0.1.0-alpha009/go.mod h1:TQLnf0OPtHsbV0/8hHLQu6fVcGptQp9/pCUFgRe/ivU=
65+
github.com/docker/go-sdk/image v0.1.0-alpha009 h1:VtwlwwLvtqqZZZuSdXeXdaWemnbq58w0LUicQmVXXPE=
66+
github.com/docker/go-sdk/image v0.1.0-alpha009/go.mod h1:2Ob24BfIflhxp8981ITSRmeLHjHq8n21V9oyq0G8zbc=
67+
github.com/docker/go-sdk/network v0.1.0-alpha009 h1:4fU7KaF4WaN8YRM2lj4xfFFkkTqDLekRrUVInbaP4DY=
68+
github.com/docker/go-sdk/network v0.1.0-alpha009/go.mod h1:dBCuDAIt5s7jOHmMDQo0eDd7I1dkVp0/7wEWtXeOHBc=
4569
github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4=
4670
github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
4771
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
@@ -83,6 +107,10 @@ github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG
83107
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
84108
github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0=
85109
github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo=
110+
github.com/moby/go-archive v0.1.0 h1:Kk/5rdW/g+H8NHdJW2gsXyZ7UnzvJNOy6VKJqueWdcQ=
111+
github.com/moby/go-archive v0.1.0/go.mod h1:G9B+YoujNohJmrIYFBpSd54GTUB4lt9S+xVQvsJyFuo=
112+
github.com/moby/patternmatcher v0.6.0 h1:GmP9lR19aU5GqSSFko+5pRqHi+Ohk1O69aFiKkVGiPk=
113+
github.com/moby/patternmatcher v0.6.0/go.mod h1:hDPoyOpDY7OrrMDLaYoY3hf52gNCR/YOUYxkhApJIxc=
86114
github.com/moby/sys/atomicwriter v0.1.0 h1:kw5D/EqkBwsBFi0ss9v1VG3wIkVhzGvLklJ+w3A14Sw=
87115
github.com/moby/sys/atomicwriter v0.1.0/go.mod h1:Ul8oqv2ZMNHOceF643P6FKPXeCmYtlQMvpizfsSoaWs=
88116
github.com/moby/sys/capability v0.4.0 h1:4D4mI6KlNtWMCM1Z/K0i7RV1FkX+DBDHKVJpCndZoHk=
@@ -93,6 +121,8 @@ github.com/moby/sys/sequential v0.6.0 h1:qrx7XFUd/5DxtqcoH1h438hF5TmOvzC/lspjy7z
93121
github.com/moby/sys/sequential v0.6.0/go.mod h1:uyv8EUTrca5PnDsdMGXhZe6CCe8U/UiTWd+lL+7b/Ko=
94122
github.com/moby/sys/user v0.4.0 h1:jhcMKit7SA80hivmFJcbB1vqmw//wU61Zdui2eQXuMs=
95123
github.com/moby/sys/user v0.4.0/go.mod h1:bG+tYYYJgaMtRKgEmuueC0hJEAZWwtIbZTB+85uoHjs=
124+
github.com/moby/sys/userns v0.1.0 h1:tVLXkFOxVu9A64/yh59slHVv9ahO9UIev4JZusOLG/g=
125+
github.com/moby/sys/userns v0.1.0/go.mod h1:IHUYgu/kao6N8YZlp9Cf444ySSvCmDlmzUcYfDHOl28=
96126
github.com/moby/term v0.5.2 h1:6qk3FJAFDs6i/q3W/pQ97SX192qKfZgGjCQqfCJkgzQ=
97127
github.com/moby/term v0.5.2/go.mod h1:d3djjFCrjnB+fl8NJux+EJzu0msscUP+f8it8hPkFLc=
98128
github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A=
@@ -138,8 +168,8 @@ go.opentelemetry.io/otel v1.37.0 h1:9zhNfelUvx0KBfu/gb+ZgeAfAgtWrfHJZcAqFC228wQ=
138168
go.opentelemetry.io/otel v1.37.0/go.mod h1:ehE/umFRLnuLa/vSccNq9oS1ErUlkkK71gMcN34UG8I=
139169
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.37.0 h1:Ahq7pZmv87yiyn3jeFz/LekZmPLLdKejuO3NcK9MssM=
140170
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.37.0/go.mod h1:MJTqhM0im3mRLw1i8uGHnCvUEeS7VwRyxlLC78PA18M=
141-
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.35.0 h1:xJ2qHD0C1BeYVTLLR9sX12+Qb95kfeD/byKj6Ky1pXg=
142-
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.35.0/go.mod h1:u5BF1xyjstDowA1R5QAO9JHzqK+ublenEW/dyqTjBVk=
171+
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.36.0 h1:nRVXXvf78e00EwY6Wp0YII8ww2JVWshZ20HfTlE11AM=
172+
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.36.0/go.mod h1:r49hO7CgrxY9Voaj3Xe8pANWtr0Oq916d0XAmOoCZAQ=
143173
go.opentelemetry.io/otel/metric v1.37.0 h1:mvwbQS5m0tbmqML4NqK+e3aDiO02vsf/WgbsdpcPoZE=
144174
go.opentelemetry.io/otel/metric v1.37.0/go.mod h1:04wGrZurHYKOc+RKeye86GwKiTb9FKm1WHtO+4EVr2E=
145175
go.opentelemetry.io/otel/sdk v1.37.0 h1:ItB0QUqnjesGRvNcmAcU0LyvkVyGJ2xftD29bWdDvKI=
@@ -156,6 +186,8 @@ go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
156186
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
157187
go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
158188
go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
189+
go.uber.org/zap/exp v0.3.0 h1:6JYzdifzYkGmTdRR59oYH+Ng7k49H9qVpWwNSsGJj3U=
190+
go.uber.org/zap/exp v0.3.0/go.mod h1:5I384qq7XGxYyByIhHm6jg5CHkGY0nsTfbDLgDDlgJQ=
159191
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
160192
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
161193
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
@@ -202,6 +234,7 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7w
202234
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
203235
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
204236
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
237+
golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
205238
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
206239
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
207240
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
@@ -213,6 +246,8 @@ golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
213246
golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
214247
golang.org/x/sys v0.34.0 h1:H5Y5sJ2L2JRdyv7ROF1he/lPdvFsd0mJHFw2ThKHxLA=
215248
golang.org/x/sys v0.34.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
249+
golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI=
250+
golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
216251
golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE=
217252
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
218253
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=

pkg/client/client.go

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,21 @@
11
package client
22

33
import (
4+
"log/slog"
45
"net"
56
"sync"
7+
"unsafe"
68

79
"github.com/docker/docker/client"
10+
client2 "github.com/docker/go-sdk/client"
811
"github.com/silenium-dev/docker-wrapper/pkg/client/provider"
912
"go.uber.org/zap"
13+
"go.uber.org/zap/exp/zapslog"
1014
)
1115

1216
type Client struct {
1317
client.APIClient
18+
sdkClient *client2.Client
1419
dockerOpts []client.Opt
1520
authProvider provider.AuthProvider
1621
imageProvider provider.ImageProvider
@@ -34,12 +39,23 @@ func NewWithOpts(opts ...Opt) (*Client, error) {
3439
if c.imageProvider == nil {
3540
c.imageProvider = provider.DefaultImageProvider()
3641
}
37-
if c.APIClient == nil {
38-
cli, err := client.NewClientWithOpts(c.dockerOpts...)
39-
if err != nil {
40-
return nil, err
41-
}
42-
c.APIClient = cli
42+
cli, err := client.NewClientWithOpts(c.dockerOpts...)
43+
if err != nil {
44+
return nil, err
4345
}
46+
c.APIClient = cli
47+
48+
result := &client2.Client{}
49+
internal := (*sdkClient)(unsafe.Pointer(result))
50+
internal.dockerClient = cli
51+
internal.once.Do(func() {})
52+
internal.log = slog.New(zapslog.NewHandler(
53+
c.logger.Desugar().Core(),
54+
zapslog.WithCaller(true),
55+
zapslog.WithName("docker-sdk"),
56+
zapslog.AddStacktraceAt(slog.LevelError),
57+
))
58+
c.sdkClient = result
59+
4460
return c, nil
4561
}

pkg/client/client_opts.go

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,6 @@ import (
1111

1212
type Opt func(*Client) error
1313

14-
func WithAPIClient(apiClient client.APIClient) Opt {
15-
return func(c *Client) error {
16-
c.APIClient = apiClient
17-
return nil
18-
}
19-
}
20-
2114
func WithVersionNegotiation(c *Client) error {
2215
c.dockerOpts = append(c.dockerOpts, client.WithAPIVersionNegotiation())
2316
return nil

0 commit comments

Comments
 (0)