One of lxc’s nice time-saving features is that, after initial container creation, it will cache the files it downloaded to do so, and when you create a new container using the same template/version/architecture, it will leverage the existing files and create the container with minimal downloads and really quickly.
A downside of this is that the cache can become stale; this is apparent when you want to install a package in a container and apt-get gives 404 errors indicating the version of the package the container knows about, is no longer available in the archive (most likely superseded by a new one).
This is easily fixed by always doing apt-get update in the container prior to any package installs/upgrades. However, it’s cumbersome, and if you’re creating dozens of new containers every day, the bandwidth and time spent re-downloading can quickly add up.
To update the “base image” or cache, which resides in /var/cache/lxc for each version, you can do two things.
most templates also support
--flush-cache so if you’re calling lxc-create directly, just add an extra
--flush-cache as template args (after
--) and the cache will be flushed before making the container. Something like
sudo lxc-create -n ubuntu -t ubuntu -- -r trusty --flush-cache
this will obliterate the existing cache and re-download everything before creating the container.
If you want to update an existing cache do something like:
sudo chroot /var/cache/lxc/trusty/rootfs-amd64/ apt-get update apt-get dist-upgrade apt-get clean exit
this will update the cache and all subsequently-created containers will know about the latest package versions.