Понимание установленных каталогов с помощью Fig и Docker
Я запутался насчет контейнеров с фигами и докером.
Я пытаюсь настроить Elastic Search и запустить его на своем бродячем ящике.
Таким образом, у меня есть фиг YML, который выглядит следующим образом:
elasticsearch:
image: dockerfile/elasticsearch
ports:
- "9200:9200"
expose:
- "9200"
volumes:
- /docker_data/elasticsearch:/data
Я запускаю его, и упругий поиск работает нормально. Затем я скручиваю некоторые данные и вижу это.
Что касается раздела томов в fig yaml - я попытался смонтировать папку / data внутри контейнера asticsearch на docker_data, чтобы данные оставались неизменными.
Однако, что очень сбивает с толку, так это то, что когда я захожу на мой хост-бродячий компьютер и захожу в / docker_data /asticsearch... Он пуст?
Когда я перехожу в каталог / data моего контейнера asticsearch... он также пуст.
Странно то, что данные сохраняются - поэтому я изо всех сил пытаюсь выяснить, где данные на самом деле хранятся в контейнере докера, в соответствии с документацией, данные должны храниться там.
Я сталкиваюсь с той же самой проблемой при замене эластичного поиска на mysql. Когда я монтирую /var/lib/mysql, он появляется пустым как на контейнере, так и на хосте.
Самое странное, что в любом случае все останется неизменным, если я удалю часть томов. Так что теперь я запутался, как это происходит и почему мне все равно нужно монтировать том в любом случае.
Я работаю в докере 1.4.1
1 ответ
У меня были точно такие же проблемы с пониманием объемов.
То, что вы пытаетесь сделать, это монтировать том из вашего контейнера на хост, что невозможно (AFAIK, начиная с Docker 1.4.1).
Вы можете только смонтировать том со своего хоста в свой контейнер, что вы и делаете и почему он пуст, поскольку Docker создает для вас пустой каталог и монтирует это "поверх" существующих данных в контейнере.
Если контейнер будет писать в /data
теперь он также будет отображаться на вашем хост-компьютере, но при этом будьте осторожны с разрешениями, особенно с Vagrant или boot2docker.
Если вы удалите тома, контейнер сохранит свои /data
потому что эта папка определяется как том Dockerfile контейнера. Проверьте документацию для деталей о синтаксисе и постоянстве томов.
Аддон: То, что вы могли бы сделать, когда вам нужно что-то достать из контейнера, это монтировать /docker_data/elasticsearch:/data-to-copy
а потом fig run elasticsearch cp -r /data /data-to-copy
, Но я сомневаюсь, что это полезно для данных, хотя я делаю нечто подобное в проекте, но для исходного кода шаблона приложения.