diff --git a/app/components/images/images.html b/app/components/images/images.html
index 5959c0bf2..8e82ff1a6 100644
--- a/app/components/images/images.html
+++ b/app/components/images/images.html
@@ -70,7 +70,7 @@
-
+
@@ -121,12 +121,12 @@
-
+
|
{{ image.Id|truncate:20}}
+ ng-if="::image.ContainerCount === 0">
Unused
|
diff --git a/app/components/images/imagesController.js b/app/components/images/imagesController.js
index e8c9ca30f..6770f44a9 100644
--- a/app/components/images/imagesController.js
+++ b/app/components/images/imagesController.js
@@ -95,7 +95,7 @@ function ($scope, $state, ImageService, Notifications, Pagination, ModalService)
$('#loadImagesSpinner').show();
var endpointProvider = $scope.applicationState.endpoint.mode.provider;
var apiVersion = $scope.applicationState.endpoint.apiVersion;
- ImageService.images(apiVersion >= 1.25 && endpointProvider !== 'DOCKER_SWARM' && endpointProvider !== 'VMWARE_VIC')
+ ImageService.images(true)
.then(function success(data) {
$scope.images = data;
})
diff --git a/app/components/templates/templatesController.js b/app/components/templates/templatesController.js
index 9a8d90455..347b11d9e 100644
--- a/app/components/templates/templatesController.js
+++ b/app/components/templates/templatesController.js
@@ -151,7 +151,7 @@ function ($scope, $q, $state, $stateParams, $anchorScroll, $filter, ContainerSer
$q.all({
templates: TemplateService.getTemplates(templatesKey),
- containers: ContainerService.getContainers(0),
+ containers: ContainerService.containers(0),
volumes: VolumeService.getVolumes(),
networks: NetworkService.networks(
provider === 'DOCKER_STANDALONE' || provider === 'DOCKER_SWARM_MODE',
diff --git a/app/models/docker/image.js b/app/models/docker/image.js
index 43301787f..5dd073800 100644
--- a/app/models/docker/image.js
+++ b/app/models/docker/image.js
@@ -3,8 +3,8 @@ function ImageViewModel(data) {
this.Tag = data.Tag;
this.Repository = data.Repository;
this.Created = data.Created;
- this.Containers = data.dataUsage ? data.dataUsage.Containers : 0;
this.Checked = false;
this.RepoTags = data.RepoTags;
this.VirtualSize = data.VirtualSize;
+ this.ContainerCount = data.ContainerCount;
}
diff --git a/app/services/docker/containerService.js b/app/services/docker/containerService.js
index 001b2203d..ee946fec3 100644
--- a/app/services/docker/containerService.js
+++ b/app/services/docker/containerService.js
@@ -3,7 +3,7 @@ angular.module('portainer.services')
'use strict';
var service = {};
- service.getContainers = function (all) {
+ service.containers = function(all) {
var deferred = $q.defer();
Container.query({ all: all }).$promise
.then(function success(data) {
diff --git a/app/services/docker/imageService.js b/app/services/docker/imageService.js
index 95b0ba92e..181de81e3 100644
--- a/app/services/docker/imageService.js
+++ b/app/services/docker/imageService.js
@@ -1,5 +1,5 @@
angular.module('portainer.services')
-.factory('ImageService', ['$q', 'Image', 'ImageHelper', 'RegistryService', 'HttpRequestHelper', 'SystemService', function ImageServiceFactory($q, Image, ImageHelper, RegistryService, HttpRequestHelper, SystemService) {
+.factory('ImageService', ['$q', 'Image', 'ImageHelper', 'RegistryService', 'HttpRequestHelper', 'ContainerService', function ImageServiceFactory($q, Image, ImageHelper, RegistryService, HttpRequestHelper, ContainerService) {
'use strict';
var service = {};
@@ -24,17 +24,23 @@ angular.module('portainer.services')
var deferred = $q.defer();
$q.all({
- dataUsage: withUsage ? SystemService.dataUsage() : { Images: [] },
+ containers: withUsage ? ContainerService.containers(1) : [],
images: Image.query({}).$promise
})
.then(function success(data) {
- var images = data.images.map(function(item) {
- item.dataUsage = data.dataUsage.Images.find(function(usage) {
- return item.Id === usage.Id;
- });
+ var containers = data.containers;
+ var images = data.images.map(function(item) {
+ item.ContainerCount = 0;
+ for (var i = 0; i < containers.length; i++) {
+ var container = containers[i];
+ if (container.ImageID === item.Id) {
+ item.ContainerCount++;
+ }
+ }
return new ImageViewModel(item);
});
+
deferred.resolve(images);
})
.catch(function error(err) {