Digamos que estoy ejecutando en un contenedor que se inició con:
docker run -v /var/run/docker.sock:/var/run/docker.sock fooluego lanzo otro contenedor desde dentro del anterior:
docker run -v /var/run/docker.sock:/var/run/docker.sock barmi pregunta es: ¿el /var/run/docker.sock del segundo comando apunta al mismo /var/run/docker.sock que el primer comando?
Los contenedores deben ser hermanos , por lo que mi segunda pregunta es: ¿cómo puedo obtener archivos del contenedor "externo" al contenedor "interior" usando la opción -v? Estoy buscando hacer:
docker run -v "/foo:/bar" -v /var/run/docker.sock:/var/run/docker.sock barCuando uno monta un socket de ventana acoplable en un contenedor, le está dando al contenedor control sobre la instancia de ventana acoplable que se ejecuta en el host .
Puede pensar en esto como análogo a dar a varios contenedores la URL de un sitio web. Cualquier cosa que haga un contenedor análogo afecta al sitio web análogo, y esos cambios serán visibles para todos.
En términos concretos, bajo esta configuración, no hay una jerarquía de contenedores: solo varios contenedores que controlan el mismo daemon docker que, de otro modo, podrían haber sido controlados a través del comando docker en el host. Cada contenedor tendrá la misma capacidad para hacer casi cualquier cosa en el host, a través del demonio docker, y el aislamiento proporcionado por los contenedores de forma predeterminada se subvertirá casi por completo.
Por esta razón, Docker in Docker tiene algunas implicaciones de seguridad inherentes, pero se puede encontrar más sobre ellas en otros lugares de Internet.
Para responder a su segunda pregunta, copiar archivos entre contenedores implica ejecutar un comando que emite el contenido del archivo en el contenedor de origen y canalizarlo a un comando que escribe en el archivo de destino en el contenedor de destino. Por ejemplo:
docker exec container1 cat /source/file | docker exec -i container2 bash -c "cat > /dest/file"Copiar varios archivos podría implicar la creación de un tarball en la fuente y expandirlo en la otra:
docker exec container1 tar -C /source -c dir| docker exec -i container2 tar -C /dest -x Para su comodidad, y para situaciones en las que un shell o tar no están disponibles dentro de un contenedor, se puede usar docker cp para copiar archivos de un contenedor al host. Al copiar un archivo de un contenedor de origen al host y luego al contenedor de destino, puede llegar a la misma solución, a costa de un poco de almacenamiento temporal. Por ejemplo:
docker cp container1:/source/file file docker cp file container2:/dest/fileSin embargo, estabas en algo. Una alternativa sería montar un directorio desde el host en ambos contenedores y comunicarse a través de ese directorio. Por ejemplo:
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 A pesar de los errores tipográficos, el ejemplo anterior dará como resultado dos contenedores disponibles. Los procesos en esos dos contenedores pueden compartir archivos a través de /mnt/share y estarán respaldados por el directorio shared/ en el host.