fix(docker): check len of device capabilities [BE-11898] (#750)

pull/12700/head
Devon Steenberg 2025-05-22 14:27:14 +12:00 committed by GitHub
parent 1bc91d0c7c
commit 45471ce86d
2 changed files with 13 additions and 9 deletions

View File

@ -54,7 +54,7 @@ angular.module('portainer.docker').controller('ContainerController', [
$scope.computeDockerGPUCommand = () => { $scope.computeDockerGPUCommand = () => {
const gpuOptions = _.find($scope.container.HostConfig.DeviceRequests, function (o) { 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) { if (!gpuOptions) {
return 'No GPU config found'; return 'No GPU config found';

View File

@ -14,8 +14,7 @@ import (
networkingutils "github.com/portainer/portainer/pkg/networking" networkingutils "github.com/portainer/portainer/pkg/networking"
"github.com/docker/docker/api/types" "github.com/docker/docker/api/types"
"github.com/docker/docker/api/types/container" dockercontainer "github.com/docker/docker/api/types/container"
_container "github.com/docker/docker/api/types/container"
"github.com/docker/docker/api/types/image" "github.com/docker/docker/api/types/image"
"github.com/docker/docker/api/types/volume" "github.com/docker/docker/api/types/volume"
"github.com/docker/docker/client" "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 { 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 { if err != nil {
return err return err
} }
@ -170,13 +169,18 @@ func dockerSnapshotContainers(snapshot *portainer.DockerSnapshot, cli *client.Cl
containerEnvs[container.ID] = response.Config.Env containerEnvs[container.ID] = response.Config.Env
var gpuOptions *_container.DeviceRequest var gpuOptions *dockercontainer.DeviceRequest
for _, deviceRequest := range response.HostConfig.Resources.DeviceRequests { if response.HostConfig != nil {
if deviceRequest.Driver == "nvidia" || deviceRequest.Capabilities[0][0] == "gpu" { 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 gpuOptions = &deviceRequest
} }
} }
}
if gpuOptions == nil { if gpuOptions == nil {
continue continue
@ -298,7 +302,7 @@ func dockerSnapshotContainerErrorLogs(snapshot *portainer.DockerSnapshot, cli *c
return nil return nil
} }
rd, err := cli.ContainerLogs(context.Background(), containerId, container.LogsOptions{ rd, err := cli.ContainerLogs(context.Background(), containerId, dockercontainer.LogsOptions{
ShowStdout: false, ShowStdout: false,
ShowStderr: true, ShowStderr: true,
Tail: "5", Tail: "5",