Problem
Używam Docker Toolbox na Windowsie. Próbowałem podmontować lokalny katalog jako wolumen (volume) w kontenerze dockerowym. W lokalnym katalogu były pliki, jednak w kontenerze ich nie widziałem – był tam jedynie pusty katalog.
Dla przykładu, na komputerze-gospodarzu mam katalog „my_data”, a w środku plik index.html. Tworzę kontener i montuję folder jako wolumen w kontenerze. Potem próbuję wyświetlić listę plików z kontenera, ale jedyne, co dostaję, to pusta lista:
$ ls my_data/ index.html $ docker run --rm -it -v `pwd`/my_data:/shared_volume ubuntu ls -al /shared_volume total 4 drwxrwxrwx 1 root root 0 Oct 26 12:01 . drwxr-xr-x 35 root root 4096 Oct 27 11:22 .. (no index.html here)
Rozwiązanie
Znalezienie rozwiązania zajęło mi kilka dni. Okazało się, że domyślnie w Docker Toolbox na Windows można montować tylko foldery znajdujące się w C:\Users . Folder, którego chciałem użyć znajdował się jednak w katalogu C:\Programming . Oto rozwiązanie, które zadziałało u mnie.
Uruchom VirtualBox GUI i dodaj katalog C:\Programming jako folder współdzielony w maszynie „default” (aby było to możliwe, VirtualBox powinien być uruchomiony z poziomu tego samego użytkownika, co docker).
Następnie wyedytuj plik „C:\Program Files\Docker Toolbox\start.sh” i dodaj następujące linie, np. pomiędzy sekcjami „Checking status on $VM” i „Setting env”:
STEP="Mounting additional folders" "${DOCKER_MACHINE}" ssh default 'sudo mkdir --parents /c/Programming' "${DOCKER_MACHINE}" ssh default 'sudo mount -t vboxsf c/Programming //c/Programming'
(na podstawie https://github.com/docker/machine/issues/1814#issuecomment-239957893)
Następnie wykonaj
docker-machine stop
I zrestartuj Docker Quickstart Terminal.
Teraz powyższy przykład powinien działać:
$ docker run --rm -it -v `pwd`/my_data:/shared_volume ubuntu ls -al /shared_volume total 5 drwxrwxrwx 1 root root 0 Oct 26 12:01 . drwxr-xr-x 35 root root 4096 Oct 27 11:27 .. -rwxrwxrwx 1 root root 13 Oct 26 12:01 index.html
.