diff --git a/index.js b/index.js
index <HASH>..<HASH> 100644
--- a/index.js
+++ b/index.js
@@ -84,7 +84,11 @@ Concat.prototype.write = function (readTree, destDir) {
     var concatenatedOutputHash = crypto.createHash('md5').update(concatenatedOutput).digest('hex')
     var cacheDir = self.getCacheDir()
     if (concatenatedOutputHash === self.cachedConcatenatedOutputHash) {
-      fs.linkSync(path.join(cacheDir, "cached-output"), path.join(destDir, self.outputFile));
+      try {
+        fs.linkSync(path.join(cacheDir, "cached-output"), path.join(destDir, self.outputFile));
+      } catch (error) {
+        fs.writeFileSync(path.join(destDir, self.outputFile), fs.readFileSync(path.join(cacheDir, "cached-output")));
+      }
     } else {
       fs.writeFileSync(path.join(destDir, self.outputFile), concatenatedOutput)
       fs.writeFileSync(path.join(cacheDir, "cached-output"), concatenatedOutput)
Fail-over to copying files instead of linking

This is slower - but required when running in VMs (like VirtualBox, VMware) using docker containers.  The docker containers don't allow hard links.  This is a similar technique as that which is used in broccoli-caching-writer.