W końcu dowiedziałem się, jak uaktualnić Windows Docker Toolbox do wersji 1.12.5 i utrzymać moje woluminy w pracy, dodając folder współdzielony w Oracle VM VirtualBox
menedżerze i wyłączając konwersję ścieżki. Jeśli masz system Windows 10+, najlepiej jest używać nowszego Dockera dla systemu Windows.
Pierwsza aktualizacja Ból:
- Najpierw odinstaluj VirtualBox.
- Tak, to może zepsuć rzeczy w innych narzędziach, takich jak Android Studio. Dzięki Docker :(
- Zainstaluj nową wersję Docker Toolbox.
Przykład bazy danych Redis:
redis:
image: redis:alpine
container_name: redis
ports:
- "6379"
volumes:
- "/var/db/redis:/data:rw"
W terminalu Docker Quickstart ....
- run
docker-machine stop default
- upewnij się, że maszyna wirtualna została włamana
W Oracle VM VirtualBox Manager ...
- Dodano udostępniony folder w
default
maszynie wirtualnej za pośrednictwem lub wiersza poleceń
D:\Projects\MyProject\db
=> /var/db
W docker-compose.yml
...
- Zmapowana objętość redis jako:
"/var/db/redis:/data:rw"
W terminalu Docker Quickstart ....
- Zestaw
COMPOSE_CONVERT_WINDOWS_PATHS=0
(dla wersji Toolbox> = 1.9.0)
- uruchom,
docker-machine start default
aby ponownie uruchomić maszynę wirtualną.
cd D:\Projects\MyProject\
docker-compose up
powinno teraz działać.
Teraz tworzy bazę danych redis w D:\Projects\MyProject\db\redis\dump.rdb
Po co unikać względnych ścieżek hostów?
I unikać ścieżek względnych hosta dla systemu Windows Toolbox, ponieważ mogą one wprowadzać nieprawidłowe znaki „\”. Nie jest to tak przyjemne, jak używanie ścieżek względnych, docker-compose.yml
ale przynajmniej moi koledzy programiści mogą z łatwością to zrobić, nawet jeśli ich folder projektu znajduje się w innym miejscu bez konieczności hakowania docker-compose.yml
pliku (złe dla SCM).
Pierwotna przyczyna
FYI ... Oto oryginalny błąd, który otrzymałem, gdy użyłem ładnych, czystych ścieżek względnych, które działały dobrze dla starszych wersji. Moje mapowanie wolumenu było kiedyś sprawiedliwe"./db/redis:/data:rw"
ERROR: for redis Cannot create container for service redis: Invalid bind mount spec "D:\\Projects\\MyProject\\db\\redis:/data:rw": Invalid volume specification: 'D:\Projects\MyProject\db\redis:/data
Dzieje się tak z dwóch powodów.
- Nie ma dostępu do
D:
dysku
- Ścieżki woluminów nie mogą zawierać
\
znaków
docker-compose
dodaje je i obwinia za to !!
- Użyj,
COMPOSE_CONVERT_WINDOWS_PATHS=0
aby zatrzymać ten nonsens.
Zalecam udokumentowanie dodatkowego mapowania folderów współdzielonych maszyny wirtualnej w docker-compose.yml
pliku, ponieważ może być konieczne ponowne odinstalowanie VirtualBox i zresetowanie folderu współdzielonego, a mimo to inni programiści będą Cię za to kochać.