diff --git a/lib/docker/util.rb b/lib/docker/util.rb index 2ca8dc6e1..284dbed26 100644 --- a/lib/docker/util.rb +++ b/lib/docker/util.rb @@ -148,15 +148,22 @@ def create_relative_dir_tar(directory, output) remove_ignored_files!(directory, files) files.each do |prefixed_file_name| - stat = File.stat(prefixed_file_name) - next unless stat.file? - - unprefixed_file_name = prefixed_file_name[directory.length..-1] - add_file_to_tar( - tar, unprefixed_file_name, stat.mode, stat.size, stat.mtime - ) do |tar_file| - IO.copy_stream(File.open(prefixed_file_name, 'rb'), tar_file) - end + add_relative_file_to_tar(tar, directory, prefixed_file_name) + end + end + end + + def add_relative_file_to_tar(tar, directory, prefixed_file_name) + stat = File.lstat(prefixed_file_name) + + unprefixed_file_name = prefixed_file_name[directory.length..-1] + if stat.symlink? + tar.add_symlink(unprefixed_file_name, File.readlink(prefixed_file_name), stat.mode) + elsif stat.file? + add_file_to_tar( + tar, unprefixed_file_name, stat.mode, stat.size, stat.mtime + ) do |tar_file| + IO.copy_stream(File.open(prefixed_file_name, 'rb'), tar_file) end end end