Merge pull request #10100 from briancain/DOCKER-TOOLBOX

Convert windows paths for volume mounts on docker driver
This commit is contained in:
Brian Cain 2018-08-17 15:08:59 -07:00 committed by GitHub
commit c2cff0dc07
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 43 additions and 7 deletions

View File

@ -49,14 +49,23 @@ module VagrantPlugins
run_cmd += volumes.map { |v|
v = v.to_s
if v.include?(":") && @executor.windows?
host, guest = v.split(":", 2)
host = Vagrant::Util::Platform.windows_path(host)
# NOTE: Docker does not support UNC style paths (which also
# means that there's no long path support). Hopefully this
# will be fixed someday and the gsub below can be removed.
host.gsub!(/^[^A-Za-z]+/, "")
v = [host, guest].join(":")
if v.index(":") != v.rindex(":")
# If we have 2 colons, the host path is an absolute Windows URL
# and we need to remove the colon from it
host, colon, guest = v.rpartition(":")
host = "//" + host[0].downcase + host[2..-1]
v = [host, guest].join(":")
else
host, guest = v.split(":", 2)
host = Vagrant::Util::Platform.windows_path(host)
# NOTE: Docker does not support UNC style paths (which also
# means that there's no long path support). Hopefully this
# will be fixed someday and the gsub below can be removed.
host.gsub!(/^[^A-Za-z]+/, "")
v = [host, guest].join(":")
end
end
['-v', v.to_s]
}
run_cmd += %W(--privileged) if params[:privileged]

View File

@ -65,6 +65,33 @@ describe VagrantPlugins::DockerProvider::Driver do
end
end
describe '#create windows' do
let(:params) { {
image: 'jimi/hendrix:eletric-ladyland',
cmd: ['play', 'voodoo-chile'],
ports: '8080:80',
volumes: 'C:/Users/BobDylan/AllAlong:/The/Watchtower',
detach: true,
links: [[:janis, 'joplin'], [:janis, 'janis']],
env: {key: 'value'},
name: cid,
hostname: 'jimi-hendrix',
privileged: true
} }
let(:translated_path) { "//c/Users/BobDylan/AllAlong:/The/Watchtower" }
before do
allow(Vagrant::Util::Platform).to receive(:windows?).and_return(true)
subject.create(params)
end
it 'shares folders' do
expect(cmd_executed).to match(/-v #{translated_path} .+ #{Regexp.escape params[:image]}/)
end
end
describe '#created?' do
let(:result) { subject.created?(cid) }