mirror of https://github.com/docker/docs.git
Fixed bug when image doesn't finish building.
This commit is contained in:
parent
0f07fc9b51
commit
0f6b7746aa
|
@ -10,7 +10,7 @@ bin
|
||||||
|
|
||||||
# Resources
|
# Resources
|
||||||
resources/cache
|
resources/cache
|
||||||
resources/base-images.tar.gz
|
resources/base-images-*.tar.gz
|
||||||
resources/virtualbox-*.pkg
|
resources/virtualbox-*.pkg
|
||||||
resources/boot2docker*
|
resources/boot2docker*
|
||||||
resources/node-webkit
|
resources/node-webkit
|
||||||
|
|
|
@ -169,6 +169,13 @@ var convertVolumeObjToArray = function (obj) {
|
||||||
};
|
};
|
||||||
|
|
||||||
Docker.getImageData = function (imageId, callback) {
|
Docker.getImageData = function (imageId, callback) {
|
||||||
|
docker.listImages({all: false}, function (err, images) {
|
||||||
|
if (err) {
|
||||||
|
callback(err, null);
|
||||||
|
} else {
|
||||||
|
var dockerImage = _.find(images, function (image) {
|
||||||
|
return image.Id === imageId;
|
||||||
|
});
|
||||||
var image = docker.getImage(imageId);
|
var image = docker.getImage(imageId);
|
||||||
image.inspect(function (err, data) {
|
image.inspect(function (err, data) {
|
||||||
if (err) {
|
if (err) {
|
||||||
|
@ -180,7 +187,19 @@ Docker.getImageData = function (imageId, callback) {
|
||||||
if (data.ContainerConfig && data.ContainerConfig.Volumes) {
|
if (data.ContainerConfig && data.ContainerConfig.Volumes) {
|
||||||
data.ContainerConfig.Volumes = convertVolumeObjToArray(data.ContainerConfig.Volumes);
|
data.ContainerConfig.Volumes = convertVolumeObjToArray(data.ContainerConfig.Volumes);
|
||||||
}
|
}
|
||||||
|
/*console.log('Image ID');
|
||||||
|
console.log(imageId);
|
||||||
|
console.log('Raw Docker Data:');
|
||||||
|
console.log(dockerImage);
|
||||||
|
console.log('Inspected Data:');
|
||||||
|
console.log(data);*/
|
||||||
|
if (!dockerImage) {
|
||||||
callback(null, data);
|
callback(null, data);
|
||||||
|
} else {
|
||||||
|
callback(null, _.extend(dockerImage, data));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
@ -196,8 +215,7 @@ Docker.listImages = function (callback) {
|
||||||
if (err) {
|
if (err) {
|
||||||
cb(err, null);
|
cb(err, null);
|
||||||
} else {
|
} else {
|
||||||
var mergedData = _.extend(image, data);
|
cb(null, data);
|
||||||
cb(null, mergedData);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -273,7 +291,7 @@ Docker.resolveDefaultImages = function () {
|
||||||
image.inspect(function (err) {
|
image.inspect(function (err) {
|
||||||
if (err) {
|
if (err) {
|
||||||
if (err.reason === 'no such image') {
|
if (err.reason === 'no such image') {
|
||||||
docker.loadImage(path.join(Util.getBinDir(), 'base-images.tar.gz'), {}, function (err) {
|
docker.loadImage(path.join(Util.getBinDir(), Docker.DEFAULT_IMAGES_FILENAME), {}, function (err) {
|
||||||
if (err) {
|
if (err) {
|
||||||
innerCallback(err);
|
innerCallback(err);
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -44,9 +44,13 @@ ImageUtil.getMetaData = function (directory) {
|
||||||
if (!kiteJSON.name) {
|
if (!kiteJSON.name) {
|
||||||
kiteJSON.name = _.last(directory.split(path.sep));
|
kiteJSON.name = _.last(directory.split(path.sep));
|
||||||
}
|
}
|
||||||
|
if (!kiteJSON.version) {
|
||||||
|
kiteJSON.version = 'latest';
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
kiteJSON = {
|
kiteJSON = {
|
||||||
name: _.last(directory.split(path.sep))
|
name: _.last(directory.split(path.sep)),
|
||||||
|
version: 'latest'
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
return kiteJSON;
|
return kiteJSON;
|
||||||
|
@ -222,6 +226,7 @@ ImageUtil.build = function (image, callback) {
|
||||||
}
|
}
|
||||||
var imageData = null;
|
var imageData = null;
|
||||||
Docker.getImageData(image.meta.name + ':' + image.meta.version, function (err, data) {
|
Docker.getImageData(image.meta.name + ':' + image.meta.version, function (err, data) {
|
||||||
|
console.log(data);
|
||||||
if (err) {
|
if (err) {
|
||||||
console.error(err);
|
console.error(err);
|
||||||
Images.update(image._id, {
|
Images.update(image._id, {
|
||||||
|
@ -277,19 +282,19 @@ ImageUtil.sync = function () {
|
||||||
} else {
|
} else {
|
||||||
var images = Images.find({}).fetch();
|
var images = Images.find({}).fetch();
|
||||||
_.each(images, function (image) {
|
_.each(images, function (image) {
|
||||||
if (image.docker && image.docker.Id) {
|
var image = Images.findOne(image._id);
|
||||||
|
if (image && image.docker && image.docker.Id) {
|
||||||
|
var duplicateImages = Images.find({'docker.Id': image.docker.Id, _id: {$ne: image._id}}).fetch();
|
||||||
|
_.each(duplicateImages, function (duplicateImage) {
|
||||||
|
Images.remove(duplicateImage._id);
|
||||||
|
});
|
||||||
var imageData = _.find(dockerImages, function (dockerImage) {
|
var imageData = _.find(dockerImages, function (dockerImage) {
|
||||||
return dockerImage.Id === image.docker.Id;
|
return dockerImage.Id === image.docker.Id;
|
||||||
});
|
});
|
||||||
if (imageData && imageData.RepoTags) {
|
if (imageData && imageData.RepoTags) {
|
||||||
var repoTag = _.first(imageData.RepoTags);
|
|
||||||
var repoTagTokens = repoTag.split(':');
|
|
||||||
var name = repoTagTokens[0];
|
|
||||||
var version = repoTagTokens[1];
|
|
||||||
Images.update(image._id, {
|
Images.update(image._id, {
|
||||||
$set: {
|
$set: {
|
||||||
'meta.name': name,
|
tags: imageData.RepoTags
|
||||||
'meta.version': version
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -314,7 +319,7 @@ ImageUtil.sync = function () {
|
||||||
_.each(diffImages, function (imageId) {
|
_.each(diffImages, function (imageId) {
|
||||||
var image = Images.findOne({'docker.Id': imageId});
|
var image = Images.findOne({'docker.Id': imageId});
|
||||||
if (image && image.status !== 'BUILDING') {
|
if (image && image.status !== 'BUILDING') {
|
||||||
//ImageUtil.remove(image._id);
|
ImageUtil.remove(image._id);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
var diffDockerImages = _.reject(dockerImages, function (image) {
|
var diffDockerImages = _.reject(dockerImages, function (image) {
|
||||||
|
@ -328,17 +333,19 @@ ImageUtil.sync = function () {
|
||||||
var buildingImage = _.find(images, function (image) {
|
var buildingImage = _.find(images, function (image) {
|
||||||
return image.status === 'BUILDING' && image.meta.name === name && image.meta.version === version;
|
return image.status === 'BUILDING' && image.meta.name === name && image.meta.version === version;
|
||||||
});
|
});
|
||||||
if (!buildingImage) {
|
if (!buildingImage && name !== '<none>' && version !== '<none>') {
|
||||||
var imageObj = {
|
var imageObj = {
|
||||||
status: 'READY',
|
status: 'READY',
|
||||||
docker: image,
|
docker: image,
|
||||||
buildLogs: [],
|
buildLogs: [],
|
||||||
createdAt: new Date(),
|
createdAt: new Date(),
|
||||||
|
tags: image.RepoTags,
|
||||||
meta: {
|
meta: {
|
||||||
name: name,
|
name: name,
|
||||||
version: version
|
version: version
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
console.log(imageObj);
|
||||||
Images.insert(imageObj);
|
Images.insert(imageObj);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -67,6 +67,10 @@ Handlebars.registerHelper('isUpdating', function () {
|
||||||
return Session.get('isUpdating');
|
return Session.get('isUpdating');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Handlebars.registerHelper('displayTags', function (tags, delimiter) {
|
||||||
|
return tags.join(delimiter);
|
||||||
|
});
|
||||||
|
|
||||||
var fixBoot2DockerVM = function (callback) {
|
var fixBoot2DockerVM = function (callback) {
|
||||||
Boot2Docker.check(function (err) {
|
Boot2Docker.check(function (err) {
|
||||||
if (err) {
|
if (err) {
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
Template.dashboard_apps.helpers({
|
Template.dashboard_apps.helpers({
|
||||||
apps: function () {
|
apps: function () {
|
||||||
return Apps.find({name: {$ne: 'kite-dns'}}, {sort: {createdAt: -1}});
|
return Apps.find({}, {sort: {createdAt: -1}});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -49,6 +49,7 @@ Template.modal_create_image.events({
|
||||||
};
|
};
|
||||||
var imageMetaData = ImageUtil.getMetaData(directory);
|
var imageMetaData = ImageUtil.getMetaData(directory);
|
||||||
imageObj.meta = imageMetaData;
|
imageObj.meta = imageMetaData;
|
||||||
|
imageObj.tags = [imageMetaData.name + ':' + imageMetaData.version];
|
||||||
var imageId = Images.insert(imageObj);
|
var imageId = Images.insert(imageObj);
|
||||||
var imagePath = path.join(Util.KITE_IMAGES_PATH, imageId);
|
var imagePath = path.join(Util.KITE_IMAGES_PATH, imageId);
|
||||||
Images.update(imageId, {
|
Images.update(imageId, {
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
Template.dashboard_images.helpers({
|
Template.dashboard_images.helpers({
|
||||||
images: function () {
|
images: function () {
|
||||||
return Images.find({'meta.name': {$ne: 'kite-dns'}}, {sort: {createdAt: -1}});
|
return Images.find({}, {sort: {createdAt: -1}});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{/if}}
|
{{/if}}
|
||||||
<a onclick="trackLink('image detail')" href="/images/{{_id}}" class="name">{{meta.name}}:{{meta.version}}</a>
|
<a onclick="trackLink('image detail')" href="/images/{{_id}}" class="name">{{displayTags tags ', '}}</a>
|
||||||
{{#if $eq status 'BUILDING'}}
|
{{#if $eq status 'BUILDING'}}
|
||||||
<small>Creating image. This may take a couple minutes...</small>
|
<small>Creating image. This may take a couple minutes...</small>
|
||||||
{{else}}
|
{{else}}
|
||||||
|
@ -33,8 +33,10 @@
|
||||||
<a onclick="trackLink('open image folder')" href="#" class="btn-icon btn-folder" target="_blank" data-toggle="tooltip" data-placement="bottom" title="Folder"><span class="typcn typcn-folder-open"></span></a>
|
<a onclick="trackLink('open image folder')" href="#" class="btn-icon btn-folder" target="_blank" data-toggle="tooltip" data-placement="bottom" title="Folder"><span class="typcn typcn-folder-open"></span></a>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{#if $neq status 'BUILDING'}}
|
{{#if $neq status 'BUILDING'}}
|
||||||
|
{{#if originPath}}
|
||||||
<a onclick="trackLink('rebuild image')" href="#" class="btn-icon btn-rebuild" target="_blank" data-toggle="tooltip" data-placement="bottom" title="Rebuild"><span class="typcn typcn-refresh-outline"></span></a>
|
<a onclick="trackLink('rebuild image')" href="#" class="btn-icon btn-rebuild" target="_blank" data-toggle="tooltip" data-placement="bottom" title="Rebuild"><span class="typcn typcn-refresh-outline"></span></a>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
{{/if}}
|
||||||
<a onclick="trackLink('image logs')" href="/images/{{_id}}/logs" class="btn-icon" data-toggle="tooltip" data-placement="bottom" title="Logs"><span class="typcn typcn-document-text"></span></a>
|
<a onclick="trackLink('image logs')" href="/images/{{_id}}/logs" class="btn-icon" data-toggle="tooltip" data-placement="bottom" title="Logs"><span class="typcn typcn-document-text"></span></a>
|
||||||
<a onclick="trackLink('image settings')" href="/images/{{_id}}/settings" class="btn-icon" data-toggle="tooltip" data-placement="bottom" title="Settings"><span class="typcn typcn-cog-outline"></span></a>
|
<a onclick="trackLink('image settings')" href="/images/{{_id}}/settings" class="btn-icon" data-toggle="tooltip" data-placement="bottom" title="Settings"><span class="typcn typcn-cog-outline"></span></a>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -18,8 +18,10 @@
|
||||||
<a onclick="trackLink('open image folder')" href="#" class="btn-folder" data-toggle="tooltip" data-placement="bottom" title="Folder" data-container="body"><span class="typcn typcn-folder-open"></span></a>
|
<a onclick="trackLink('open image folder')" href="#" class="btn-folder" data-toggle="tooltip" data-placement="bottom" title="Folder" data-container="body"><span class="typcn typcn-folder-open"></span></a>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{#if $neq status 'BUILDING'}}
|
{{#if $neq status 'BUILDING'}}
|
||||||
|
{{#if originPath}}
|
||||||
<a onclick="trackLink('rebuild image')" href="#" class="btn-rebuild" data-toggle="tooltip" data-placement="bottom" title="Rebuild" data-container="body"><span class="typcn typcn-refresh-outline"></span></a>
|
<a onclick="trackLink('rebuild image')" href="#" class="btn-rebuild" data-toggle="tooltip" data-placement="bottom" title="Rebuild" data-container="body"><span class="typcn typcn-refresh-outline"></span></a>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
{{/if}}
|
||||||
</span>
|
</span>
|
||||||
</h3>
|
</h3>
|
||||||
<div class="options">
|
<div class="options">
|
||||||
|
|
Loading…
Reference in New Issue