Он всегда будет использовать файловую систему хоста.Невозможно напрямую смонтировать файловую систему одного контейнера в другой.
Например:
host$ sudo docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock docker sh
0123456789ab# docker run -v /:/host --rm -it busybox sh
13579bdf0246# cat /host/etc/shadow
Последняя команда выведет зашифрованный файл паролей хоста, а не что-либо промежуточное.container.
Если из этого не видно, монтирование сокета Docker для программного запуска команд Docker имеет серьезные последствия для безопасности, и вам следует тщательно продумать, действительно ли это хороший подход для вас.
Я почти уверен, что относительные пути в docker-compose.yml
на самом деле не будут работать с этой настройкой (потому что вы не можете привязать объекты из промежуточного контейнера).Вам нужно будет смонтировать один и тот же контент в оба контейнера, чтобы один мог отправлять файлы другому.Использование именованных томов может быть полезным здесь (потому что имена томов на самом деле не зависят от путей к хостам);в зависимости от того, что именно вы делаете, может работать обходной путь docker create
, а затем docker cp
.
На уровне реализации существует только один демон Docker, и он работает на хосте.Вы можете опубликовать свой сокет в разных местах, но в конечном итоге этот демон получает запросы типа «создайте контейнер, который монтирует каталог хоста / x / y», и демон интерпретирует эти запросы в контексте хоста.Он не знает, что запрос поступил из другого контейнера (или, возможно, с другого хоста; но о проблемах безопасности см. Выше).