mirror of https://github.com/portainer/portainer
fix(snapshot): prevent snapshot containers from fast failing in Swarm mode (#8308)
parent
0befdacc0e
commit
cef9255161
|
@ -167,22 +167,29 @@ func snapshotContainers(snapshot *portainer.DockerSnapshot, cli *client.Client)
|
||||||
// snapshot GPUs
|
// snapshot GPUs
|
||||||
response, err := cli.ContainerInspect(context.Background(), container.ID)
|
response, err := cli.ContainerInspect(context.Background(), container.ID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
// Inspect a container will fail when the container runs on a different
|
||||||
}
|
// Swarm node, so it is better to log the error instead of return error
|
||||||
|
// when the Swarm mode is enabled
|
||||||
var gpuOptions *_container.DeviceRequest = nil
|
if !snapshot.Swarm {
|
||||||
for _, deviceRequest := range response.HostConfig.Resources.DeviceRequests {
|
return err
|
||||||
if deviceRequest.Driver == "nvidia" || deviceRequest.Capabilities[0][0] == "gpu" {
|
} else {
|
||||||
gpuOptions = &deviceRequest
|
log.Info().Str("container", container.ID).Err(err).Msg("unable to inspect container in other Swarm nodes")
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
|
var gpuOptions *_container.DeviceRequest = nil
|
||||||
if gpuOptions != nil {
|
for _, deviceRequest := range response.HostConfig.Resources.DeviceRequests {
|
||||||
if gpuOptions.Count == -1 {
|
if deviceRequest.Driver == "nvidia" || deviceRequest.Capabilities[0][0] == "gpu" {
|
||||||
gpuUseAll = true
|
gpuOptions = &deviceRequest
|
||||||
|
}
|
||||||
}
|
}
|
||||||
for _, id := range gpuOptions.DeviceIDs {
|
|
||||||
gpuUseSet[id] = struct{}{}
|
if gpuOptions != nil {
|
||||||
|
if gpuOptions.Count == -1 {
|
||||||
|
gpuUseAll = true
|
||||||
|
}
|
||||||
|
for _, id := range gpuOptions.DeviceIDs {
|
||||||
|
gpuUseSet[id] = struct{}{}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue