From eab65b2e25ee763a314517b36b6a976b4f40c36d Mon Sep 17 00:00:00 2001
From: Sam Lawson <sam@kronologic.ai>
Date: Thu, 30 May 2024 17:21:32 -0700
Subject: [PATCH 1/8] upgrade docker version and go

---
 container_info_internal_test.go          |   2 -
 dktest.go                                |   6 +-
 go.mod                                   |  41 ++++++---
 go.sum                                   | 109 ++++++++++++-----------
 mockdockerclient/container_api_client.go |  20 ++---
 mockdockerclient/image_api_client.go     |   6 +-
 6 files changed, 101 insertions(+), 83 deletions(-)

diff --git a/container_info_internal_test.go b/container_info_internal_test.go
index 07e06af..51ece80 100644
--- a/container_info_internal_test.go
+++ b/container_info_internal_test.go
@@ -3,9 +3,7 @@ package dktest
 import (
 	"strconv"
 	"testing"
-)
 
-import (
 	"github.com/docker/go-connections/nat"
 	"github.com/stretchr/testify/assert"
 )
diff --git a/dktest.go b/dktest.go
index e30e4e9..3b76932 100644
--- a/dktest.go
+++ b/dktest.go
@@ -89,7 +89,7 @@ func runImage(ctx context.Context, lgr Logger, dc client.ContainerAPIClient, img
 	c.ID = createResp.ID
 	lgr.Log("Created container:", c.String())
 
-	if err := dc.ContainerStart(ctx, createResp.ID, types.ContainerStartOptions{}); err != nil {
+	if err := dc.ContainerStart(ctx, createResp.ID, container.StartOptions{}); err != nil {
 		return c, err
 	}
 	lgr.Log("Started container:", c.String())
@@ -115,7 +115,7 @@ func runImage(ctx context.Context, lgr Logger, dc client.ContainerAPIClient, img
 func stopContainer(ctx context.Context, lgr Logger, dc client.ContainerAPIClient, c ContainerInfo,
 	logStdout, logStderr bool) {
 	if logStdout || logStderr {
-		if logs, err := dc.ContainerLogs(ctx, c.ID, types.ContainerLogsOptions{
+		if logs, err := dc.ContainerLogs(ctx, c.ID, container.LogsOptions{
 			Timestamps: true, ShowStdout: logStdout, ShowStderr: logStderr,
 		}); err == nil {
 			b, err := ioutil.ReadAll(logs)
@@ -140,7 +140,7 @@ func stopContainer(ctx context.Context, lgr Logger, dc client.ContainerAPIClient
 	lgr.Log("Stopped container:", c.String())
 
 	if err := dc.ContainerRemove(ctx, c.ID,
-		types.ContainerRemoveOptions{RemoveVolumes: true, Force: true}); err != nil {
+		container.RemoveOptions{RemoveVolumes: true, Force: true}); err != nil {
 		lgr.Log("Error removing container:", c.String(), "error:", err)
 	}
 	lgr.Log("Removed container:", c.String())
diff --git a/go.mod b/go.mod
index ffb1dee..dca760f 100644
--- a/go.mod
+++ b/go.mod
@@ -1,25 +1,44 @@
 module github.com/dhui/dktest
 
 require (
-	github.com/Microsoft/go-winio v0.5.1 // indirect
-	github.com/docker/distribution v2.8.2+incompatible // indirect
-	github.com/docker/docker v24.0.9+incompatible
+	github.com/docker/docker v26.1.3+incompatible
 	github.com/docker/go-connections v0.4.0
+	github.com/lib/pq v1.8.0
+	github.com/opencontainers/image-spec v1.0.2
+	github.com/stretchr/testify v1.9.0
+)
+
+require (
+	github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect
+	github.com/Microsoft/go-winio v0.5.1 // indirect
+	github.com/containerd/log v0.1.0 // indirect
+	github.com/davecgh/go-spew v1.1.1 // indirect
+	github.com/distribution/reference v0.6.0 // indirect
 	github.com/docker/go-units v0.4.0 // indirect
+	github.com/felixge/httpsnoop v1.0.4 // indirect
+	github.com/go-logr/logr v1.4.1 // indirect
+	github.com/go-logr/stdr v1.2.2 // indirect
 	github.com/gogo/protobuf v1.3.2 // indirect
-	github.com/google/go-cmp v0.5.6 // indirect
-	github.com/kr/text v0.2.0 // indirect
-	github.com/lib/pq v1.8.0
+	github.com/moby/docker-image-spec v1.3.1 // indirect
 	github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6 // indirect
 	github.com/morikuni/aec v1.0.0 // indirect
 	github.com/opencontainers/go-digest v1.0.0 // indirect
-	github.com/opencontainers/image-spec v1.0.2
-	github.com/stretchr/testify v1.7.0
-	golang.org/x/net v0.23.0 // indirect
+	github.com/pkg/errors v0.9.1 // indirect
+	github.com/pmezard/go-difflib v1.0.0 // indirect
+	go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.52.0 // indirect
+	go.opentelemetry.io/otel v1.27.0 // indirect
+	go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0 // indirect
+	go.opentelemetry.io/otel/metric v1.27.0 // indirect
+	go.opentelemetry.io/otel/sdk v1.27.0 // indirect
+	go.opentelemetry.io/otel/trace v1.27.0 // indirect
+	golang.org/x/net v0.25.0 // indirect
+	golang.org/x/sys v0.20.0 // indirect
 	golang.org/x/time v0.0.0-20220224211638-0e9765cccd65 // indirect
 	gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
-	gopkg.in/yaml.v3 v3.0.0 // indirect
+	gopkg.in/yaml.v3 v3.0.1 // indirect
 	gotest.tools/v3 v3.1.0 // indirect
 )
 
-go 1.13
+go 1.21
+
+toolchain go1.22.2
diff --git a/go.sum b/go.sum
index 2443164..fd88044 100644
--- a/go.sum
+++ b/go.sum
@@ -2,27 +2,38 @@ github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOEl
 github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
 github.com/Microsoft/go-winio v0.5.1 h1:aPJp2QD7OOrhO5tQXqQoGSJc+DjDtWTGLOmNyAm6FgY=
 github.com/Microsoft/go-winio v0.5.1/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84=
-github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
+github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
+github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
+github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I=
+github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo=
 github.com/creack/pty v1.1.11 h1:07n33Z8lZxZ2qwegKbObQohDhXDQxiMMz1NOUGYlesw=
 github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
-github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8=
-github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
-github.com/docker/docker v24.0.9+incompatible h1:HPGzNmwfLZWdxHqK9/II92pyi1EpYKsAqcl4G0Of9v0=
-github.com/docker/docker v24.0.9+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
+github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk=
+github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E=
+github.com/docker/docker v26.1.3+incompatible h1:lLCzRbrVZrljpVNobJu1J2FHk8V0s4BawoZippkc+xo=
+github.com/docker/docker v26.1.3+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
 github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ=
 github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec=
 github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw=
 github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
+github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
+github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
+github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
+github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
+github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
 github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
 github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
 github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
 github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ=
-github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
+github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 h1:bkypFPDjIYGfCYD5mRBvpqxfYX1YCS1PXdKYWi8FsN0=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0/go.mod h1:P+Lt/0by1T8bfcF3z737NnSbmxQAppXMRziHUxPOC8k=
 github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
 github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
 github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI=
@@ -33,6 +44,8 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
 github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
 github.com/lib/pq v1.8.0 h1:9xohqzkUwzR4Ga4ivdTcawVS89YSDVxXMa3xJX3cGzg=
 github.com/lib/pq v1.8.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
+github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0=
+github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo=
 github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6 h1:dcztxKSvZ4Id8iPpHERQBbIJfabdt4wUm5qy3wOL2Zc=
 github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw=
 github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A=
@@ -46,71 +59,59 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
 github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/sirupsen/logrus v1.7.0 h1:ShrD1U9pZB12TX0cVy0DtePoCH97K8EtX+mg7ZARUtM=
 github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
+github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
+github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
 github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
-github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
-github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
-github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
 github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.52.0 h1:9l89oX4ba9kHbBol3Xin3leYJ+252h0zszDtBwyKe2A=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.52.0/go.mod h1:XLZfZboOJWHNKUv7eH0inh0E9VV6eWDFB/9yJyTLPp0=
+go.opentelemetry.io/otel v1.27.0 h1:9BZoF3yMK/O1AafMiQTVu0YDj5Ea4hPhxCs7sGva+cg=
+go.opentelemetry.io/otel v1.27.0/go.mod h1:DMpAK8fzYRzs+bi3rS5REupisuqTheUlSZJ1WnZaPAQ=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0 h1:R9DE4kQ4k+YtfLI2ULwX82VtNQ2J8yZmA7ZIF/D+7Mc=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0/go.mod h1:OQFyQVrDlbe+R7xrEyDr/2Wr67Ol0hRUgsfA+V5A95s=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0 h1:QY7/0NeRPKlzusf40ZE4t1VlMKbqSNT7cJRYzWuja0s=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0/go.mod h1:HVkSiDhTM9BoUJU8qE6j2eSWLLXvi1USXjyd2BXT8PY=
+go.opentelemetry.io/otel/metric v1.27.0 h1:hvj3vdEKyeCi4YaYfNjv2NUje8FqKqUY8IlF0FxV/ik=
+go.opentelemetry.io/otel/metric v1.27.0/go.mod h1:mVFgmRlhljgBiuk/MP/oKylr4hs85GZAylncepAX/ak=
+go.opentelemetry.io/otel/sdk v1.27.0 h1:mlk+/Y1gLPLn84U4tI8d3GNJmGT/eXe3ZuOXN9kTWmI=
+go.opentelemetry.io/otel/sdk v1.27.0/go.mod h1:Ha9vbLwJE6W86YstIywK2xFfPjbWlCuwPtMkKdz/Y4A=
+go.opentelemetry.io/otel/trace v1.27.0 h1:IqYb813p7cmbHk0a5y6pD5JPakbVfftRXABGt5/Rscw=
+go.opentelemetry.io/otel/trace v1.27.0/go.mod h1:6RiD1hkAprV4/q+yd2ln1HG9GoPx39SuvvstaLBl+l4=
+go.opentelemetry.io/proto/otlp v1.2.0 h1:pVeZGk7nXDC9O2hncA6nHldxEjm6LByfA2aN8IOkz94=
+go.opentelemetry.io/proto/otlp v1.2.0/go.mod h1:gGpR8txAl5M03pDhMC79G6SdqNV26naRm/KDsgaHD8A=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
-golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=
-golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs=
 golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
-golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
 golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
-golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
-golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
-golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
-golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
-golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=
-golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
+golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac=
+golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM=
 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.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
-golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=
-golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
-golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
-golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
-golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
-golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
-golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk=
-golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58=
+golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y=
+golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
-golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
-golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
-golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
+golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk=
+golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
 golang.org/x/time v0.0.0-20220224211638-0e9765cccd65 h1:M73Iuj3xbbb9Uk1DYhzydthsj6oOd6l9bpuFcNoUvTs=
 golang.org/x/time v0.0.0-20220224211638-0e9765cccd65/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -119,19 +120,23 @@ golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtn
 golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
 golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
 golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
-golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
-golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 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 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
 golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+google.golang.org/genproto/googleapis/api v0.0.0-20240520151616-dc85e6b867a5 h1:P8OJ/WCl/Xo4E4zoe4/bifHpSmmKwARqyqE4nW6J2GQ=
+google.golang.org/genproto/googleapis/api v0.0.0-20240520151616-dc85e6b867a5/go.mod h1:RGnPtTG7r4i8sPlNyDeikXF99hMM+hN6QMm4ooG9g2g=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240515191416-fc5f0ca64291 h1:AgADTJarZTBqgjiUzRgfaBchgYB3/WFTC80GPwsMcRI=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240515191416-fc5f0ca64291/go.mod h1:EfXuqaE1J41VCDicxHzUDm+8rk+7ZdXzHV0IhO/I6s0=
+google.golang.org/grpc v1.64.0 h1:KH3VH9y/MgNQg1dE7b3XfVK0GsPSIzJwdF617gUSbvY=
+google.golang.org/grpc v1.64.0/go.mod h1:oxjF8E3FBnjp+/gVFYdWacaLDx9na1aqy9oovLpxQYg=
+google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg=
+google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gopkg.in/yaml.v3 v3.0.0 h1:hjy8E9ON/egN1tAYqKb61G10WtihqetD4sz2H+8nIeA=
-gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
+gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk=
 gotest.tools/v3 v3.1.0 h1:rVV8Tcg/8jHUkPUorwjaMTtemIMVXfIPKiOqnhEhakk=
 gotest.tools/v3 v3.1.0/go.mod h1:fHy7eyTmJFO5bQbUsEGQ1v4m2J3Jz9eWL54TP2/ZuYQ=
diff --git a/mockdockerclient/container_api_client.go b/mockdockerclient/container_api_client.go
index 3b0074e..e22b253 100644
--- a/mockdockerclient/container_api_client.go
+++ b/mockdockerclient/container_api_client.go
@@ -3,16 +3,14 @@ package mockdockerclient
 import (
 	"context"
 	"io"
-)
 
-import (
 	"github.com/docker/docker/api/types"
 	"github.com/docker/docker/api/types/container"
 	"github.com/docker/docker/api/types/filters"
 	"github.com/docker/docker/api/types/network"
 	"github.com/docker/docker/client"
 
-	"github.com/opencontainers/image-spec/specs-go/v1"
+	v1 "github.com/opencontainers/image-spec/specs-go/v1"
 )
 
 // ContainerAPIClient is a mock implementation of the Docker's client.ContainerAPIClient interface
@@ -31,7 +29,7 @@ var _ client.ContainerAPIClient = (*ContainerAPIClient)(nil)
 //
 // TODO: properly implement
 func (c *ContainerAPIClient) ContainerAttach(context.Context, string,
-	types.ContainerAttachOptions) (types.HijackedResponse, error) {
+	container.AttachOptions) (types.HijackedResponse, error) {
 	return types.HijackedResponse{}, nil
 }
 
@@ -39,7 +37,7 @@ func (c *ContainerAPIClient) ContainerAttach(context.Context, string,
 //
 // TODO: properly implement
 func (c *ContainerAPIClient) ContainerCommit(context.Context, string,
-	types.ContainerCommitOptions) (types.IDResponse, error) {
+	container.CommitOptions) (types.IDResponse, error) {
 	return types.IDResponse{}, nil
 }
 
@@ -88,7 +86,7 @@ func (c *ContainerAPIClient) ContainerExecInspect(context.Context,
 //
 // TODO: properly implement
 func (c *ContainerAPIClient) ContainerExecResize(context.Context, string,
-	types.ResizeOptions) error {
+	container.ResizeOptions) error {
 	return nil
 }
 
@@ -134,13 +132,13 @@ func (c *ContainerAPIClient) ContainerKill(context.Context, string, string) erro
 //
 // TODO: properly implement
 func (c *ContainerAPIClient) ContainerList(context.Context,
-	types.ContainerListOptions) ([]types.Container, error) {
+	container.ListOptions) ([]types.Container, error) {
 	return nil, nil
 }
 
 // ContainerLogs is a mock implementation of Docker's client.ContainerAPIClient.ContainerLogs()
 func (c *ContainerAPIClient) ContainerLogs(context.Context, string,
-	types.ContainerLogsOptions) (io.ReadCloser, error) {
+	container.LogsOptions) (io.ReadCloser, error) {
 	if c.Logs == nil {
 		return nil, Err
 	}
@@ -154,7 +152,7 @@ func (c *ContainerAPIClient) ContainerPause(context.Context, string) error { ret
 
 // ContainerRemove is a mock implementation of Docker's client.ContainerAPIClient.ContainerRemove()
 func (c *ContainerAPIClient) ContainerRemove(context.Context, string,
-	types.ContainerRemoveOptions) error {
+	container.RemoveOptions) error {
 	return c.RemoveErr
 }
 
@@ -168,7 +166,7 @@ func (c *ContainerAPIClient) ContainerRename(context.Context, string, string) er
 // ContainerResize is a mock implementation of Docker's client.ContainerAPIClient.ContainerResize()
 //
 // TODO: properly implement
-func (c *ContainerAPIClient) ContainerResize(context.Context, string, types.ResizeOptions) error {
+func (c *ContainerAPIClient) ContainerResize(context.Context, string, container.ResizeOptions) error {
 	return nil
 }
 
@@ -204,7 +202,7 @@ func (c *ContainerAPIClient) ContainerStatsOneShot(context.Context, string) (typ
 
 // ContainerStart is a mock implementation of Docker's client.ContainerAPIClient.ContainerStart()
 func (c *ContainerAPIClient) ContainerStart(context.Context, string,
-	types.ContainerStartOptions) error {
+	container.StartOptions) error {
 	return c.StartErr
 }
 
diff --git a/mockdockerclient/image_api_client.go b/mockdockerclient/image_api_client.go
index 563709f..55fd310 100644
--- a/mockdockerclient/image_api_client.go
+++ b/mockdockerclient/image_api_client.go
@@ -3,9 +3,7 @@ package mockdockerclient
 import (
 	"context"
 	"io"
-)
 
-import (
 	"github.com/docker/docker/api/types"
 	"github.com/docker/docker/api/types/filters"
 	"github.com/docker/docker/api/types/image"
@@ -71,7 +69,7 @@ func (c *ImageAPIClient) ImageInspectWithRaw(context.Context, string) (types.Ima
 // ImageList is a mock implementation of Docker's client.ImageAPIClient.ImageList()
 //
 // TODO: properly implement
-func (c *ImageAPIClient) ImageList(context.Context, types.ImageListOptions) ([]types.ImageSummary, error) {
+func (c *ImageAPIClient) ImageList(context.Context, image.ListOptions) ([]image.Summary, error) {
 	return nil, nil
 }
 
@@ -101,7 +99,7 @@ func (c *ImageAPIClient) ImagePush(context.Context, string, types.ImagePushOptio
 //
 // TODO: properly implement
 func (c *ImageAPIClient) ImageRemove(context.Context, string,
-	types.ImageRemoveOptions) ([]types.ImageDeleteResponseItem, error) {
+	image.RemoveOptions) ([]image.DeleteResponse, error) {
 	return nil, nil
 }
 

From c5f735223fab7efb97eb0b315a2a12ccda9cfc8e Mon Sep 17 00:00:00 2001
From: Sam Lawson <sam@kronologic.ai>
Date: Thu, 30 May 2024 17:29:25 -0700
Subject: [PATCH 2/8] fix rand, deprecated, ioutil

---
 dktest.go                            | 10 +++++-----
 mockdockerclient/image_api_client.go |  8 ++++----
 rand.go                              |  2 +-
 3 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/dktest.go b/dktest.go
index 3b76932..c571a3e 100644
--- a/dktest.go
+++ b/dktest.go
@@ -3,13 +3,13 @@ package dktest
 import (
 	"context"
 	"fmt"
-	"io/ioutil"
+	"io"
 	"strings"
 	"testing"
 	"time"
 
-	"github.com/docker/docker/api/types"
 	"github.com/docker/docker/api/types/container"
+	"github.com/docker/docker/api/types/image"
 	"github.com/docker/docker/api/types/network"
 	"github.com/docker/docker/client"
 	"github.com/docker/docker/pkg/jsonmessage"
@@ -35,7 +35,7 @@ func pullImage(ctx context.Context, lgr Logger, dc client.ImageAPIClient, imgNam
 	lgr.Log("Pulling image:", imgName)
 	// lgr.Log(dc.ImageList(ctx, types.ImageListOptions{All: true}))
 
-	resp, err := dc.ImagePull(ctx, imgName, types.ImagePullOptions{Platform: platform})
+	resp, err := dc.ImagePull(ctx, imgName, image.PullOptions{Platform: platform})
 	if err != nil {
 		return err
 	}
@@ -59,7 +59,7 @@ func pullImage(ctx context.Context, lgr Logger, dc client.ImageAPIClient, imgNam
 func removeImage(ctx context.Context, lgr Logger, dc client.ImageAPIClient, imgName string) {
 	lgr.Log("Removing image:", imgName)
 
-	if _, err := dc.ImageRemove(ctx, imgName, types.ImageRemoveOptions{Force: true, PruneChildren: true}); err != nil {
+	if _, err := dc.ImageRemove(ctx, imgName, image.RemoveOptions{Force: true, PruneChildren: true}); err != nil {
 		lgr.Log("Failed to remove image: ", err.Error())
 	}
 }
@@ -118,7 +118,7 @@ func stopContainer(ctx context.Context, lgr Logger, dc client.ContainerAPIClient
 		if logs, err := dc.ContainerLogs(ctx, c.ID, container.LogsOptions{
 			Timestamps: true, ShowStdout: logStdout, ShowStderr: logStderr,
 		}); err == nil {
-			b, err := ioutil.ReadAll(logs)
+			b, err := io.ReadAll(logs)
 			defer func() {
 				if err := logs.Close(); err != nil {
 					lgr.Log("Error closing logs:", err)
diff --git a/mockdockerclient/image_api_client.go b/mockdockerclient/image_api_client.go
index 55fd310..1e5de0e 100644
--- a/mockdockerclient/image_api_client.go
+++ b/mockdockerclient/image_api_client.go
@@ -40,7 +40,7 @@ func (c *ImageAPIClient) BuildCancel(context.Context, string) error { return nil
 //
 // TODO: properly implement
 func (c *ImageAPIClient) ImageCreate(context.Context, string,
-	types.ImageCreateOptions) (io.ReadCloser, error) {
+	image.CreateOptions) (io.ReadCloser, error) {
 	return nil, nil
 }
 
@@ -55,7 +55,7 @@ func (c *ImageAPIClient) ImageHistory(context.Context, string) ([]image.HistoryR
 //
 // TODO: properly implement
 func (c *ImageAPIClient) ImageImport(context.Context, types.ImageImportSource, string,
-	types.ImageImportOptions) (io.ReadCloser, error) {
+	image.ImportOptions) (io.ReadCloser, error) {
 	return nil, nil
 }
 
@@ -81,7 +81,7 @@ func (c *ImageAPIClient) ImageLoad(context.Context, io.Reader, bool) (types.Imag
 }
 
 // ImagePull is a mock implementation of Docker's client.ImageAPIClient.ImagePull()
-func (c *ImageAPIClient) ImagePull(context.Context, string, types.ImagePullOptions) (io.ReadCloser, error) {
+func (c *ImageAPIClient) ImagePull(context.Context, string, image.PullOptions) (io.ReadCloser, error) {
 	if c.PullResp == nil {
 		return nil, Err
 	}
@@ -91,7 +91,7 @@ func (c *ImageAPIClient) ImagePull(context.Context, string, types.ImagePullOptio
 // ImagePush is a mock implementation of Docker's client.ImageAPIClient.ImagePush()
 //
 // TODO: properly implement
-func (c *ImageAPIClient) ImagePush(context.Context, string, types.ImagePushOptions) (io.ReadCloser, error) {
+func (c *ImageAPIClient) ImagePush(context.Context, string, image.PushOptions) (io.ReadCloser, error) {
 	return nil, nil
 }
 
diff --git a/rand.go b/rand.go
index 427a963..7290bfe 100644
--- a/rand.go
+++ b/rand.go
@@ -11,7 +11,7 @@ const (
 )
 
 func init() {
-	rand.Seed(time.Now().UnixNano())
+	rand.New(rand.NewSource(time.Now().UnixNano()))
 }
 
 func randString(n uint) string {

From c8af20f144ec2344e90bbfce20715bb5e6d4e880 Mon Sep 17 00:00:00 2001
From: Sam Lawson <sam@kronologic.ai>
Date: Thu, 30 May 2024 17:34:33 -0700
Subject: [PATCH 3/8] update rand.go to allow unsecure random int

---
 rand.go | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/rand.go b/rand.go
index 7290bfe..dbd2c26 100644
--- a/rand.go
+++ b/rand.go
@@ -11,6 +11,7 @@ const (
 )
 
 func init() {
+	// nolint:gosec
 	rand.New(rand.NewSource(time.Now().UnixNano()))
 }
 
@@ -20,7 +21,8 @@ func randString(n uint) string {
 	}
 	b := make([]byte, n)
 	for i := range b {
-		b[i] = chars[rand.Intn(len(chars))] // nolint:gosec
+		// nolint:gosec
+		b[i] = chars[rand.Intn(len(chars))]
 	}
 	return string(b)
 }

From 52b9e419b6105455d4f3d9fabc0bfd20f14904ad Mon Sep 17 00:00:00 2001
From: Sam Lawson <sam@kronologic.ai>
Date: Thu, 30 May 2024 17:36:46 -0700
Subject: [PATCH 4/8] spacing

---
 rand.go | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/rand.go b/rand.go
index dbd2c26..f637a39 100644
--- a/rand.go
+++ b/rand.go
@@ -11,8 +11,7 @@ const (
 )
 
 func init() {
-	// nolint:gosec
-	rand.New(rand.NewSource(time.Now().UnixNano()))
+	rand.New(rand.NewSource(time.Now().UnixNano())) // nolint:gosec
 }
 
 func randString(n uint) string {
@@ -21,8 +20,7 @@ func randString(n uint) string {
 	}
 	b := make([]byte, n)
 	for i := range b {
-		// nolint:gosec
-		b[i] = chars[rand.Intn(len(chars))]
+		b[i] = chars[rand.Intn(len(chars))] // nolint:gosec
 	}
 	return string(b)
 }

From 9441a9fe2bf8a66bab0e39f8565bd42a85d8edc9 Mon Sep 17 00:00:00 2001
From: Sam Lawson <sam@kronologic.ai>
Date: Thu, 30 May 2024 17:49:27 -0700
Subject: [PATCH 5/8] add later versions of go for suppoert

---
 .circleci/config.yml | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/.circleci/config.yml b/.circleci/config.yml
index b8db018..a6708a6 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -44,6 +44,20 @@ jobs:
     environment:
       GO_VERSION: "1.19.x"
 
+  "golang-1_20":
+    <<: *template
+    environment:
+      GO_VERSION: "1.20.x"
+
+  "golang-1_21":
+    <<: *template
+    environment:
+      GO_VERSION: "1.21.x"
+
+  "golang-1_22":
+    <<: *template
+    environment:
+      GO_VERSION: "1.22.x"
 
 workflows:
   version: 2
@@ -51,3 +65,6 @@ workflows:
     jobs:
       - "golang-1_18"
       - "golang-1_19"
+      - "golang-1_20"
+      - "golang-1_21"
+      - "golang-1_22"

From 2259d1cdfe2ed20575fa09f9ec6feed4387a540f Mon Sep 17 00:00:00 2001
From: Sam Lawson <sam@kronologic.ai>
Date: Fri, 28 Jun 2024 13:00:27 -0700
Subject: [PATCH 6/8] undo circle ci changes

---
 .circleci/config.yml | 17 -----------------
 1 file changed, 17 deletions(-)

diff --git a/.circleci/config.yml b/.circleci/config.yml
index a6708a6..b8db018 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -44,20 +44,6 @@ jobs:
     environment:
       GO_VERSION: "1.19.x"
 
-  "golang-1_20":
-    <<: *template
-    environment:
-      GO_VERSION: "1.20.x"
-
-  "golang-1_21":
-    <<: *template
-    environment:
-      GO_VERSION: "1.21.x"
-
-  "golang-1_22":
-    <<: *template
-    environment:
-      GO_VERSION: "1.22.x"
 
 workflows:
   version: 2
@@ -65,6 +51,3 @@ workflows:
     jobs:
       - "golang-1_18"
       - "golang-1_19"
-      - "golang-1_20"
-      - "golang-1_21"
-      - "golang-1_22"

From 9c0da8c441200d2a5555771e32d30172acbf0385 Mon Sep 17 00:00:00 2001
From: Sam Lawson <sam@kronologic.ai>
Date: Sat, 29 Jun 2024 08:20:14 -0700
Subject: [PATCH 7/8] bump docker

---
 go.mod                               | 2 +-
 go.sum                               | 4 ++--
 mockdockerclient/image_api_client.go | 2 +-
 3 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/go.mod b/go.mod
index dca760f..b1d9f38 100644
--- a/go.mod
+++ b/go.mod
@@ -1,7 +1,7 @@
 module github.com/dhui/dktest
 
 require (
-	github.com/docker/docker v26.1.3+incompatible
+	github.com/docker/docker v27.0.2+incompatible
 	github.com/docker/go-connections v0.4.0
 	github.com/lib/pq v1.8.0
 	github.com/opencontainers/image-spec v1.0.2
diff --git a/go.sum b/go.sum
index fd88044..6132d7d 100644
--- a/go.sum
+++ b/go.sum
@@ -12,8 +12,8 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk=
 github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E=
-github.com/docker/docker v26.1.3+incompatible h1:lLCzRbrVZrljpVNobJu1J2FHk8V0s4BawoZippkc+xo=
-github.com/docker/docker v26.1.3+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
+github.com/docker/docker v27.0.2+incompatible h1:mNhCtgXNV1fIRns102grG7rdzIsGGCq1OlOD0KunZos=
+github.com/docker/docker v27.0.2+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
 github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ=
 github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec=
 github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw=
diff --git a/mockdockerclient/image_api_client.go b/mockdockerclient/image_api_client.go
index 1e5de0e..23b5562 100644
--- a/mockdockerclient/image_api_client.go
+++ b/mockdockerclient/image_api_client.go
@@ -54,7 +54,7 @@ func (c *ImageAPIClient) ImageHistory(context.Context, string) ([]image.HistoryR
 // ImageImport is a mock implementation of Docker's client.ImageAPIClient.ImageImport()
 //
 // TODO: properly implement
-func (c *ImageAPIClient) ImageImport(context.Context, types.ImageImportSource, string,
+func (c *ImageAPIClient) ImageImport(context.Context, image.ImportSource, string,
 	image.ImportOptions) (io.ReadCloser, error) {
 	return nil, nil
 }

From 60df8b3da5f0812773e25f5af6804068725dd008 Mon Sep 17 00:00:00 2001
From: Sam Lawson <sam@kronologic.ai>
Date: Sat, 29 Jun 2024 08:27:29 -0700
Subject: [PATCH 8/8] clean up deprecated

---
 mockdockerclient/container_api_client.go | 32 ++++++++++++------------
 mockdockerclient/image_api_client.go     | 10 ++++----
 2 files changed, 21 insertions(+), 21 deletions(-)

diff --git a/mockdockerclient/container_api_client.go b/mockdockerclient/container_api_client.go
index e22b253..99c9a81 100644
--- a/mockdockerclient/container_api_client.go
+++ b/mockdockerclient/container_api_client.go
@@ -62,7 +62,7 @@ func (c *ContainerAPIClient) ContainerDiff(context.Context,
 //
 // TODO: properly implement
 func (c *ContainerAPIClient) ContainerExecAttach(context.Context, string,
-	types.ExecStartCheck) (types.HijackedResponse, error) {
+	container.ExecStartOptions) (types.HijackedResponse, error) {
 	return types.HijackedResponse{}, nil
 }
 
@@ -70,7 +70,7 @@ func (c *ContainerAPIClient) ContainerExecAttach(context.Context, string,
 //
 // TODO: properly implement
 func (c *ContainerAPIClient) ContainerExecCreate(context.Context, string,
-	types.ExecConfig) (types.IDResponse, error) {
+	container.ExecOptions) (types.IDResponse, error) {
 	return types.IDResponse{}, nil
 }
 
@@ -78,8 +78,8 @@ func (c *ContainerAPIClient) ContainerExecCreate(context.Context, string,
 //
 // TODO: properly implement
 func (c *ContainerAPIClient) ContainerExecInspect(context.Context,
-	string) (types.ContainerExecInspect, error) {
-	return types.ContainerExecInspect{}, nil
+	string) (container.ExecInspect, error) {
+	return container.ExecInspect{}, nil
 }
 
 // ContainerExecResize is a mock implementation of Docker's client.ContainerAPIClient.ContainerExecResize()
@@ -94,7 +94,7 @@ func (c *ContainerAPIClient) ContainerExecResize(context.Context, string,
 //
 // TODO: properly implement
 func (c *ContainerAPIClient) ContainerExecStart(context.Context, string,
-	types.ExecStartCheck) error {
+	container.ExecStartOptions) error {
 	return nil
 }
 
@@ -181,23 +181,23 @@ func (c *ContainerAPIClient) ContainerRestart(context.Context, string, container
 //
 // TODO: properly implement
 func (c *ContainerAPIClient) ContainerStatPath(context.Context, string,
-	string) (types.ContainerPathStat, error) {
-	return types.ContainerPathStat{}, nil
+	string) (container.PathStat, error) {
+	return container.PathStat{}, nil
 }
 
 // ContainerStats is a mock implementation of Docker's client.ContainerAPIClient.ContainerStats()
 //
 // TODO: properly implement
 func (c *ContainerAPIClient) ContainerStats(context.Context, string,
-	bool) (types.ContainerStats, error) {
-	return types.ContainerStats{}, nil
+	bool) (container.StatsResponseReader, error) {
+	return container.StatsResponseReader{}, nil
 }
 
 // ContainerStatsOneShot is a mock implementation of Docker's client.ContainerAPIClient.ContainerStatsOneShot()
 //
 // TODO: properly implement
-func (c *ContainerAPIClient) ContainerStatsOneShot(context.Context, string) (types.ContainerStats, error) {
-	return types.ContainerStats{}, nil
+func (c *ContainerAPIClient) ContainerStatsOneShot(context.Context, string) (container.StatsResponseReader, error) {
+	return container.StatsResponseReader{}, nil
 }
 
 // ContainerStart is a mock implementation of Docker's client.ContainerAPIClient.ContainerStart()
@@ -246,21 +246,21 @@ func (c *ContainerAPIClient) ContainerWait(context.Context, string,
 //
 // TODO: properly implement
 func (c *ContainerAPIClient) CopyFromContainer(context.Context, string, string) (io.ReadCloser,
-	types.ContainerPathStat, error) {
-	return nil, types.ContainerPathStat{}, nil
+	container.PathStat, error) {
+	return nil, container.PathStat{}, nil
 }
 
 // CopyToContainer is a mock implementation of Docker's client.ContainerAPIClient.CopyToContainer()
 //
 // TODO: properly implement
 func (c *ContainerAPIClient) CopyToContainer(context.Context, string, string, io.Reader,
-	types.CopyToContainerOptions) error {
+	container.CopyToContainerOptions) error {
 	return nil
 }
 
 // ContainersPrune is a mock implementation of Docker's client.ContainerAPIClient.ContainersPrune()
 //
 // TODO: properly implement
-func (c *ContainerAPIClient) ContainersPrune(context.Context, filters.Args) (types.ContainersPruneReport, error) {
-	return types.ContainersPruneReport{}, nil
+func (c *ContainerAPIClient) ContainersPrune(context.Context, filters.Args) (container.PruneReport, error) {
+	return container.PruneReport{}, nil
 }
diff --git a/mockdockerclient/image_api_client.go b/mockdockerclient/image_api_client.go
index 23b5562..f63f23f 100644
--- a/mockdockerclient/image_api_client.go
+++ b/mockdockerclient/image_api_client.go
@@ -76,8 +76,8 @@ func (c *ImageAPIClient) ImageList(context.Context, image.ListOptions) ([]image.
 // ImageLoad is a mock implementation of Docker's client.ImageAPIClient.ImageLoad()
 //
 // TODO: properly implement
-func (c *ImageAPIClient) ImageLoad(context.Context, io.Reader, bool) (types.ImageLoadResponse, error) {
-	return types.ImageLoadResponse{}, nil
+func (c *ImageAPIClient) ImageLoad(context.Context, io.Reader, bool) (image.LoadResponse, error) {
+	return image.LoadResponse{}, nil
 }
 
 // ImagePull is a mock implementation of Docker's client.ImageAPIClient.ImagePull()
@@ -107,7 +107,7 @@ func (c *ImageAPIClient) ImageRemove(context.Context, string,
 //
 // TODO: properly implement
 func (c *ImageAPIClient) ImageSearch(context.Context, string,
-	types.ImageSearchOptions) ([]registry.SearchResult, error) {
+	registry.SearchOptions) ([]registry.SearchResult, error) {
 	return nil, nil
 }
 
@@ -126,6 +126,6 @@ func (c *ImageAPIClient) ImageTag(context.Context, string, string) error { retur
 // ImagesPrune is a mock implementation of Docker's client.ImageAPIClient.ImagesPrune()
 //
 // TODO: properly implement
-func (c *ImageAPIClient) ImagesPrune(context.Context, filters.Args) (types.ImagesPruneReport, error) {
-	return types.ImagesPruneReport{}, nil
+func (c *ImageAPIClient) ImagesPrune(context.Context, filters.Args) (image.PruneReport, error) {
+	return image.PruneReport{}, nil
 }