tag run imagen hub exportar example docker

run - export docker image to tar file



Cómo mapear rutas de volumen usando Docker''s--volumes-from? (2)

Por completitud...

#create data containers docker run --name=d1 -v /svr1 busybox sh -c ''touch /svr1/some_data'' docker run --name=d2 -v /svr2 busybox sh -c ''touch /svr2/some_data'' # all together... docker run --rm --volumes-from=d1 --volumes-from=d2 busybox sh -c ''find -name some_data'' # prints: # ./svr2/some_data # ./svr1/some_data # cleanup... docker rm -f d1 d2

El "--volumes-from = container " simplemente hace un mapa sobre el sistema de archivos, como mount --bind

Si quiere cambiar la ruta, la respuesta de Jiri es (actualmente) la única. Pero si se encuentra en un entorno limitado, es posible que desee utilizar dockers incorporados en las capacidades de análisis de análisis:

# create data containers docker run --name=DATA1 --volume=/srv busybox sh -c ''touch /srv/some_data-1'' docker run --name=DATA2 --volume=/srv busybox sh -c ''touch /srv/some_data-2'' # run with volumes and show the data docker run / -v $(docker inspect -f ''{{ index .Volumes "/srv" }}'' DATA1):/srv1 / -v $(docker inspect -f ''{{ index .Volumes "/srv" }}'' DATA2):/srv2 / --rm busybox sh -c ''find -name some_data-*'' # prints: # ./srv2/some_data-2 # ./srv1/some_data-1 # ditch data containers... docker rm -f DATA1 DATA2

esto probablemente incluso funciona con la versión anterior de bash que viene con boot2docker.

Soy nuevo en Docker y estoy entusiasmado con el uso de la función --volumes-from , pero hay algo que no entiendo.

Si quiero usar --volumes-from con dos contenedores de solo datos, cada uno de los cuales exporta volúmenes nombrados /srv , ¿cómo puedo evitar que las rutas de volumen colisionen? Puedo mapear nombres de volumen al crear un montaje de vinculación usando [host-dir]:[container-dir] ; ¿cómo hago eso con --volumes-from ?

Entonces, lo que quiero sería algo como esto:

docker run --name=DATA1 --volume=/srv busybox true docker run --name=DATA2 --volume=/srv busybox true docker run -t -i -rm --volumes-from DATA1:/srv1 --volumes-from DATA2:/srv2 ubuntu bash


Se puede hacer, pero no es compatible en este momento en la interfaz de línea de comandos del acoplador.

Cómo

Encuentra los directorios de volúmenes:

docker inspect DATA1 | grep "vfs/dir" # output something like: # "/srv": "/var/lib/docker/vfs/dir/<long vol id>"

Por lo tanto, puede automatizar esto y montar estos directorios en los puntos de montaje de su elección:

# load directories in variables: SRV1=$(docker inspect DATA1 | grep "vfs/dir" | awk ''/"(.*)"/ { gsub(/"/,"",$2); print $2 }'') SRV2=$(docker inspect DATA2 | grep "vfs/dir" | awk ''/"(.*)"/ { gsub(/"/,"",$2); print $2 }'')

ahora, monte estos volúmenes por directorios reales en lugar de los --volumes-from:

docker run -t -i -v $SRV1:/srv1 -v $SRV2:/srv2 ubuntu bash

IMO, la funcionalidad es idéntica, porque esto es lo mismo que se hace al usar --volumes-from .