Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: replace fsouza/go-dockerclient with docker/docker/client, fixes #3460 #5787

Merged
merged 2 commits into from
Feb 17, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
5 changes: 3 additions & 2 deletions cmd/ddev/cmd/a.go
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
package cmd

import (
"os"

"github.com/ddev/ddev/pkg/dockerutil"
"github.com/ddev/ddev/pkg/globalconfig"
"os"
)

// This file is a.go because global config must be loaded before anybody else
Expand All @@ -15,5 +16,5 @@ func init() {
_ = os.Setenv("DOCKER_CLI_HINTS", "false")
_ = os.Setenv("MUTAGEN_DATA_DIRECTORY", globalconfig.GetMutagenDataDirectory())
// GetDockerClient should be called early to get DOCKER_HOST set
_ = dockerutil.GetDockerClient()
_, _ = dockerutil.GetDockerClient()
}
2 changes: 1 addition & 1 deletion cmd/ddev/cmd/debug-dockercheck.go
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ var DebugDockercheckCmd = &cobra.Command{
}
}

client := dockerutil.GetDockerClient()
_, client := dockerutil.GetDockerClient()
if client == nil {
util.Failed("Unable to get Docker client")
}
Expand Down
19 changes: 9 additions & 10 deletions cmd/ddev/cmd/delete-images.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@ import (
"strings"

"github.com/ddev/ddev/pkg/ddevapp"
dockerImages "github.com/ddev/ddev/pkg/docker"
ddevImages "github.com/ddev/ddev/pkg/docker"
"github.com/ddev/ddev/pkg/dockerutil"
"github.com/ddev/ddev/pkg/nodeps"
"github.com/ddev/ddev/pkg/util"
"github.com/ddev/ddev/pkg/versionconstants"
docker "github.com/fsouza/go-dockerclient"
dockerTypes "github.com/docker/docker/api/types"
"github.com/spf13/cobra"
)

Expand Down Expand Up @@ -56,9 +56,8 @@ func init() {

// deleteDdevImages removes Docker images prefixed with DDEV-
func deleteDdevImages(deleteAll bool) error {

client := dockerutil.GetDockerClient()
images, err := client.ListImages(docker.ListImagesOptions{
ctx, client := dockerutil.GetDockerClient()
images, err := client.ImageList(ctx, dockerTypes.ImageListOptions{
All: true,
})
if err != nil {
Expand Down Expand Up @@ -96,11 +95,11 @@ func deleteDdevImages(deleteAll bool) error {
return images[i].RepoTags[0] > images[j].RepoTags[0]
})

webimg := dockerImages.GetWebImage()
routerimage := dockerImages.GetRouterImage()
sshimage := dockerImages.GetSSHAuthImage()
webimg := ddevImages.GetWebImage()
routerimage := ddevImages.GetRouterImage()
sshimage := ddevImages.GetSSHAuthImage()

nameAry := strings.Split(dockerImages.GetDBImage(nodeps.MariaDB, ""), ":")
nameAry := strings.Split(ddevImages.GetDBImage(nodeps.MariaDB, ""), ":")
keepDBImageTag := "notagfound"
if len(nameAry) > 1 {
keepDBImageTag = nameAry[1]
Expand Down Expand Up @@ -129,7 +128,7 @@ func deleteDdevImages(deleteAll bool) error {
}
// TODO: Verify the functionality here. May not work since GetRouterImage() returns full image spec
// If a routerImage, but doesn't match our routerimage, delete it
if strings.HasPrefix(tag, dockerImages.GetRouterImage()) && !strings.HasPrefix(tag, routerimage) {
if strings.HasPrefix(tag, ddevImages.GetRouterImage()) && !strings.HasPrefix(tag, routerimage) {
if err = dockerutil.RemoveImage(tag); err != nil {
return err
}
Expand Down
31 changes: 12 additions & 19 deletions cmd/ddev/cmd/networks_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import (
"testing"

"github.com/ddev/ddev/pkg/dockerutil"
docker "github.com/fsouza/go-dockerclient"
dockerTypes "github.com/docker/docker/api/types"
asrt "github.com/stretchr/testify/assert"
)

Expand All @@ -16,7 +16,7 @@ import (
func TestNetworkDuplicates(t *testing.T) {
assert := asrt.New(t)

client := dockerutil.GetDockerClient()
ctx, client := dockerutil.GetDockerClient()

// Create two networks with the same name
networkName := "ddev-" + t.Name() + "_default"
Expand All @@ -25,7 +25,7 @@ func TestNetworkDuplicates(t *testing.T) {
err := dockerutil.RemoveNetwork(networkName)
assert.NoError(err)

networks, err := client.ListNetworks()
networks, err := client.NetworkList(ctx, dockerTypes.NetworkListOptions{})
assert.NoError(err)

// Ensure the network is not in the list
Expand All @@ -35,35 +35,28 @@ func TestNetworkDuplicates(t *testing.T) {
})

labels := map[string]string{"com.ddev.platform": "ddev"}
netOptions := docker.CreateNetworkOptions{
Name: networkName,
netOptions := dockerTypes.NetworkCreate{
Driver: "bridge",
Internal: false,
Labels: labels,
}

// Create the first network
_, err := client.CreateNetwork(netOptions)
_, err := client.NetworkCreate(ctx, networkName, netOptions)
assert.NoError(err)

// Create a second network with the same name
_, errDuplicate := client.CreateNetwork(netOptions)
_, errDuplicate := client.NetworkCreate(ctx, networkName, netOptions)

errVersion := dockerutil.CheckDockerVersion(">= 25.0.0-alpha1")
// Go library docker/docker/client v25+ throws an error,
// no matter what version of Docker is installed
assert.Error(errDuplicate)

if errVersion == nil {
// Duplicate cannot be created with Docker >= 25.x.x
assert.Error(errDuplicate)
} else {
// Duplicate can be created with Docker < 25.x.x
assert.NoError(errDuplicate)
}

// The duplicate network is removed here
err = dockerutil.EnsureNetwork(client, networkName, netOptions)
// Check if the network is created
err = dockerutil.EnsureNetwork(ctx, client, networkName, netOptions)
assert.NoError(err)

// This check would fail if there is a network duplicate
_, err = client.NetworkInfo(networkName)
_, err = client.NetworkInspect(ctx, networkName, dockerTypes.NetworkInspectOptions{})
assert.NoError(err)
}
28 changes: 17 additions & 11 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ require (
github.com/amplitude/analytics-go v1.0.1
github.com/cheggaaa/pb v1.0.29
github.com/denisbrodbeck/machineid v1.0.1
github.com/docker/docker v24.0.7+incompatible
github.com/fsouza/go-dockerclient v1.10.1
github.com/docker/docker v25.0.3+incompatible
github.com/docker/go-connections v0.5.0
github.com/goodhosts/hostsfile v0.1.6
github.com/google/go-github/v52 v52.0.0
github.com/google/uuid v1.5.0
Expand All @@ -27,9 +27,9 @@ require (
github.com/stretchr/testify v1.8.4
github.com/ulikunitz/xz v0.5.11
github.com/withfig/autocomplete-tools/integrations/cobra v1.2.1
golang.org/x/mod v0.14.0
golang.org/x/mod v0.15.0
golang.org/x/oauth2 v0.15.0
golang.org/x/sys v0.16.0
golang.org/x/sys v0.17.0
golang.org/x/term v0.16.0
golang.org/x/text v0.14.0
gopkg.in/segmentio/analytics-go.v3 v3.1.0
Expand All @@ -46,38 +46,44 @@ require (
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 // indirect
github.com/chzyer/readline v1.5.1 // indirect
github.com/cloudflare/circl v1.3.7 // indirect
github.com/containerd/containerd v1.7.11 // indirect
github.com/containerd/log v0.1.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/dimchansky/utfbom v1.1.1 // indirect
github.com/docker/go-connections v0.4.0 // indirect
github.com/distribution/reference v0.5.0 // indirect
github.com/docker/go-units v0.5.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/golang/protobuf v1.5.3 // indirect
github.com/google/go-querystring v1.1.0 // indirect
github.com/huandu/xstrings v1.4.0 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/klauspost/compress v1.17.4 // indirect
github.com/magefile/mage v1.15.0 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-runewidth v0.0.15 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/moby/patternmatcher v0.6.0 // indirect
github.com/moby/sys/sequential v0.5.0 // indirect
github.com/moby/term v0.5.0 // indirect
github.com/morikuni/aec v1.0.0 // indirect
github.com/opencontainers/go-digest v1.0.0 // indirect
github.com/opencontainers/image-spec v1.1.0-rc5 // indirect
github.com/opencontainers/runc v1.1.12 // indirect
github.com/opencontainers/image-spec v1.1.0-rc6 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/rivo/uniseg v0.4.4 // indirect
github.com/rogpeppe/go-internal v1.11.0 // indirect
github.com/segmentio/backo-go v1.0.1 // indirect
github.com/shopspring/decimal v1.3.1 // indirect
github.com/spf13/cast v1.6.0 // indirect
github.com/xtgo/uuid v0.0.0-20140804021211-a0b114877d4c // indirect
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.48.0 // indirect
go.opentelemetry.io/otel v1.23.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.22.0 // indirect
go.opentelemetry.io/otel/metric v1.23.0 // indirect
go.opentelemetry.io/otel/sdk v1.22.0 // indirect
go.opentelemetry.io/otel/trace v1.23.0 // indirect
golang.org/x/crypto v0.18.0 // indirect
golang.org/x/sync v0.6.0 // indirect
golang.org/x/time v0.5.0 // indirect
golang.org/x/tools v0.17.0 // indirect
google.golang.org/appengine v1.6.8 // indirect
google.golang.org/protobuf v1.32.0 // indirect
Expand Down