diff --git a/app/docker/views/containers/edit/containerController.js b/app/docker/views/containers/edit/containerController.js index 78f153e27..f1ff8f27c 100644 --- a/app/docker/views/containers/edit/containerController.js +++ b/app/docker/views/containers/edit/containerController.js @@ -54,7 +54,7 @@ angular.module('portainer.docker').controller('ContainerController', [ $scope.computeDockerGPUCommand = () => { const gpuOptions = _.find($scope.container.HostConfig.DeviceRequests, function (o) { - return o.Driver === 'nvidia' || o.Capabilities[0][0] === 'gpu'; + return o.Driver === 'nvidia' || (o.Capabilities && o.Capabilities.length > 0 && o.Capabilities[0] > 0 && o.Capabilities[0][0] === 'gpu'); }); if (!gpuOptions) { return 'No GPU config found'; diff --git a/pkg/snapshot/docker.go b/pkg/snapshot/docker.go index 3ea4dc0d5..810dbeaa9 100644 --- a/pkg/snapshot/docker.go +++ b/pkg/snapshot/docker.go @@ -14,8 +14,7 @@ import ( networkingutils "github.com/portainer/portainer/pkg/networking" "github.com/docker/docker/api/types" - "github.com/docker/docker/api/types/container" - _container "github.com/docker/docker/api/types/container" + dockercontainer "github.com/docker/docker/api/types/container" "github.com/docker/docker/api/types/image" "github.com/docker/docker/api/types/volume" "github.com/docker/docker/client" @@ -128,7 +127,7 @@ func dockerSnapshotSwarmServices(snapshot *portainer.DockerSnapshot, cli *client } func dockerSnapshotContainers(snapshot *portainer.DockerSnapshot, cli *client.Client) error { - containers, err := cli.ContainerList(context.Background(), container.ListOptions{All: true}) + containers, err := cli.ContainerList(context.Background(), dockercontainer.ListOptions{All: true}) if err != nil { return err } @@ -170,11 +169,16 @@ func dockerSnapshotContainers(snapshot *portainer.DockerSnapshot, cli *client.Cl containerEnvs[container.ID] = response.Config.Env - var gpuOptions *_container.DeviceRequest + var gpuOptions *dockercontainer.DeviceRequest - for _, deviceRequest := range response.HostConfig.Resources.DeviceRequests { - if deviceRequest.Driver == "nvidia" || deviceRequest.Capabilities[0][0] == "gpu" { - gpuOptions = &deviceRequest + if response.HostConfig != nil { + for _, deviceRequest := range response.HostConfig.DeviceRequests { + if deviceRequest.Driver == "nvidia" || + (len(deviceRequest.Capabilities) > 0 && + len(deviceRequest.Capabilities[0]) > 0 && + deviceRequest.Capabilities[0][0] == "gpu") { + gpuOptions = &deviceRequest + } } } @@ -298,7 +302,7 @@ func dockerSnapshotContainerErrorLogs(snapshot *portainer.DockerSnapshot, cli *c return nil } - rd, err := cli.ContainerLogs(context.Background(), containerId, container.LogsOptions{ + rd, err := cli.ContainerLogs(context.Background(), containerId, dockercontainer.LogsOptions{ ShowStdout: false, ShowStderr: true, Tail: "5",