diff --git a/.github/workflows/e2e_docker.yaml b/.github/workflows/e2e_docker.yaml index b6af03d553..f3dae11b44 100644 --- a/.github/workflows/e2e_docker.yaml +++ b/.github/workflows/e2e_docker.yaml @@ -46,8 +46,6 @@ permissions: {} jobs: test-docker: runs-on: ubuntu-22.04 - # TODO: remove this when the job gets stable - continue-on-error: true steps: - name: Checkout Code uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 @@ -111,6 +109,7 @@ jobs: DOCKER_HOST="unix:///var/run/docker.sock" DOCKER_NETWORK_NAME="kind" CONTAINER_RUNTIME="${{ inputs.container_runtime }}" + DOCKER_API_VERSION="1.44" EOF # For debugging cat docker.properties diff --git a/src/cloud-api-adaptor/test/e2e/docker_common.go b/src/cloud-api-adaptor/test/e2e/docker_common.go index 217f8fbdce..860f9d561e 100644 --- a/src/cloud-api-adaptor/test/e2e/docker_common.go +++ b/src/cloud-api-adaptor/test/e2e/docker_common.go @@ -11,7 +11,7 @@ import ( "testing" "time" - "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/container" "github.com/docker/docker/client" ) @@ -26,13 +26,13 @@ func (c DockerAssert) DefaultTimeout() time.Duration { } func (l DockerAssert) HasPodVM(t *testing.T, id string) { - conn, err := client.NewClientWithOpts(client.FromEnv) + conn, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation()) if err != nil { t.Fatal(err) } // Check if the container is running - containers, err := conn.ContainerList(context.Background(), types.ContainerListOptions{}) + containers, err := conn.ContainerList(context.Background(), container.ListOptions{}) if err != nil { t.Fatal(err) } diff --git a/src/cloud-api-adaptor/test/provisioner/docker/provision_common.go b/src/cloud-api-adaptor/test/provisioner/docker/provision_common.go index 374c2df96d..c1dcbeb56c 100644 --- a/src/cloud-api-adaptor/test/provisioner/docker/provision_common.go +++ b/src/cloud-api-adaptor/test/provisioner/docker/provision_common.go @@ -75,8 +75,11 @@ func NewDockerProvisioner(properties map[string]string) (pv.CloudProvisioner, er // set environment variables os.Setenv("DOCKER_HOST", DockerProps.DockerHost) + if DockerProps.ApiVer != "" { + os.Setenv("DOCKER_API_VERSION", DockerProps.ApiVer) + } - conn, err := client.NewClientWithOpts(client.FromEnv) + conn, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation()) if err != nil { log.Errorf("Error creating the Docker client: %v", err) return nil, err diff --git a/src/cloud-api-adaptor/test/provisioner/docker/provision_docker.properties b/src/cloud-api-adaptor/test/provisioner/docker/provision_docker.properties index d5d5f094d8..1fbf9d6026 100644 --- a/src/cloud-api-adaptor/test/provisioner/docker/provision_docker.properties +++ b/src/cloud-api-adaptor/test/provisioner/docker/provision_docker.properties @@ -3,6 +3,7 @@ CLUSTER_NAME="peer-pods" DOCKER_HOST="unix:///var/run/docker.sock" DOCKER_PODVM_IMAGE="quay.io/confidential-containers/podvm-docker-image" DOCKER_NETWORK_NAME="kind" +DOCKER_API_VERSION="1.44" CAA_IMAGE="" CAA_IMAGE_TAG="" diff --git a/src/cloud-providers/docker/manager.go b/src/cloud-providers/docker/manager.go index e5920ef80e..684b3db0ea 100644 --- a/src/cloud-providers/docker/manager.go +++ b/src/cloud-providers/docker/manager.go @@ -33,7 +33,7 @@ func (_ *Manager) ParseCmd(flags *flag.FlagSet) { func (m *Manager) LoadEnv() { provider.DefaultToEnv(&dockerCfg.DockerHost, "DOCKER_HOST", "unix:///var/run/docker.sock") - provider.DefaultToEnv(&dockerCfg.DockerAPIVersion, "DOCKER_API_VERSION", "1.40") + provider.DefaultToEnv(&dockerCfg.DockerAPIVersion, "DOCKER_API_VERSION", "1.44") provider.DefaultToEnv(&dockerCfg.DockerCertPath, "DOCKER_CERT_PATH", "") dockerTLSVerify := os.Getenv("DOCKER_TLS_VERIFY") if dockerTLSVerify == "1" || dockerTLSVerify == "true" { diff --git a/src/cloud-providers/docker/provider.go b/src/cloud-providers/docker/provider.go index 40142adabd..d676613a49 100644 --- a/src/cloud-providers/docker/provider.go +++ b/src/cloud-providers/docker/provider.go @@ -32,11 +32,21 @@ func NewProvider(config *Config) (*dockerProvider, error) { logger.Printf("docker config: %#v", config) - cli, err := client.NewClientWithOpts(client.FromEnv) + cli, err := client.NewClientWithOpts(client.FromEnv, client.WithVersion(config.DockerAPIVersion)) if err != nil { return nil, err } + // Log Docker client and server versions for debugging + ctx := context.Background() + serverVersion, err := cli.ServerVersion(ctx) + if err != nil { + logger.Printf("Warning: failed to get Docker server version: %v", err) + } else { + logger.Printf("Docker server version: %s, API version: %s", serverVersion.Version, serverVersion.APIVersion) + } + logger.Printf("Docker client API version: %s", cli.ClientVersion()) + // Create the data directory if it doesn't exist err = os.MkdirAll(config.DataDir, 0755) if err != nil {