Наконец выяснилось, как обновить Windows Docker Toolbox до версии v1.12.5 и сохранить работу моих томов, добавив общую папку в Oracle VM VirtualBox
диспетчере и отключив преобразование пути. Если у вас Windows 10+, вам лучше использовать новую версию Docker для Windows.
1-е обновление Боль:
- Сначала удалите VirtualBox.
- Да, это может сломать работу других инструментов, таких как Android Studio. Спасибо, Докер :(
- Установите новую версию Docker Toolbox.
Пример базы данных Redis:
redis:
image: redis:alpine
container_name: redis
ports:
- "6379"
volumes:
- "/var/db/redis:/data:rw"
В терминале быстрого запуска Docker ....
- run
docker-machine stop default
- Убедитесь, что виртуальная машина подключена
В Oracle VM VirtualBox Manager ...
- Добавлена общая папка в
default
ВМ через или командную строку
D:\Projects\MyProject\db
=> /var/db
В docker-compose.yml
...
- Отображенный том redis как:
"/var/db/redis:/data:rw"
В терминале быстрого запуска Docker ....
- Задавать
COMPOSE_CONVERT_WINDOWS_PATHS=0
(для версии Toolbox> = 1.9.0)
- запустить,
docker-machine start default
чтобы перезапустить виртуальную машину.
cd D:\Projects\MyProject\
docker-compose up
должен работать сейчас.
Теперь создает базу данных Redis в D:\Projects\MyProject\db\redis\dump.rdb
Зачем избегать относительных путей к хостам?
Я избегал относительных путей хоста для Windows Toolbox, так как они могут вводить недопустимые символы '\'. Это не так хорошо, как использование путей относительно, docker-compose.yml
но, по крайней мере, мои коллеги-разработчики могут легко это сделать, даже если их папка проекта находится в другом месте, без необходимости взламыватьdocker-compose.yml
файл (плохо для SCM).
Оригинальный выпуск
К вашему сведению ... Вот исходная ошибка, которую я получил, когда использовал хорошие чистые относительные пути, которые раньше отлично работали для старых версий. Мое отображение объема раньше было просто"./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
Это не работает по двум причинам.
- Нет доступа к
D:
диску
- Пути к томам не могут включать
\
символы
docker-compose
добавляет их, а затем обвиняет вас в этом !!
- Используйте,
COMPOSE_CONVERT_WINDOWS_PATHS=0
чтобы остановить эту чушь.
Я рекомендую задокументировать ваше дополнительное сопоставление общих папок виртуальной машины в вашем docker-compose.yml
файле, поскольку вам может потребоваться снова удалить VirtualBox и сбросить общую папку, и в любом случае ваши коллеги-разработчики полюбят вас за это.