Когда вы монтируете докер-сокет в контейнер, он / она дает контейнеру контроль над экземпляром докера, выполняющего на хосте .
Вы можете думать об этом как о предоставлении нескольким контейнерам URL-адреса веб-сайта. Что бы ни делали аналогичные контейнеры, влияет на аналогичный веб-сайт, и эти изменения будут видны всем.
Конкретно, в этой настройке нет иерархии контейнеров: только несколько контейнеров, управляющих одним и тем же демоном докера, который в противном случае мог бы контролироваться с помощью команды docker
на хосте. Каждый контейнер будет иметь равную способность делать на хосте практически все, что угодно, с помощью демона docker, и изоляция, обеспечиваемая контейнерами по умолчанию, будет почти полностью разрушена.
По этой причине, докер в докере имеет некоторые внутренние последствия для безопасности, но больше об этом можно найти в других местах в Интернете.
Чтобы ответить на ваш второй вопрос, копирование файлов между контейнерами включает запуск команды, которая выдает содержимое файла в исходный контейнер, и передачу его в команду, которая записывает файл назначения в контейнер назначения. Например:
docker exec container1 cat /source/file | docker exec -i container2 bash -c "cat > /dest/file"
Копирование нескольких файлов может включать создание архива в источнике и расширение его в другом:
docker exec container1 tar -C /source -c dir| docker exec -i container2 tar -C /dest -x
Для удобства и для ситуаций, когда оболочка или tar
недоступны в контейнере, docker cp
можно использовать для копирования файлов из контейнера на хост. Скопировав файл из исходного контейнера на хост, а затем в целевой контейнер, вы можете прийти к тому же решению, потратив немного временного хранилища. Например:
docker cp container1:/source/file file
docker cp file container2:/dest/file
Вы были на что-то, хотя. Альтернативой может быть монтирование каталога с хоста в оба контейнера и связь через этот каталог. Например:
mkdir shared
docker run -d --name=container1 -v $PWD/shared:/mnt/share image command
docker run -d --name=container2 -v $PWD/shared:/mnt/share image command
Несмотря на опечатки, приведенный выше пример приведет к тому, что станут доступны два контейнера. Процессы в этих двух контейнерах могут обмениваться файлами через /mnt/share
с поддержкой каталога shared/
на хосте.