Estamos trabajando para crear una imagen estándar de "ciencia de datos" en Docker para ayudar a nuestro equipo a mantener un entorno coherente. Para que esto nos sea útil, necesitamos que los contenedores tengan acceso de lectura/escritura a la red de nuestra empresa. ¿Cómo puedo montar una unidad de red en un contenedor docker?
Esto es lo que probé usando la imagen rocker/rstudio de Docker Hub:
Esto funciona:
docker run -d -p 8787:8787 -v //c/users/{insert user}:/home/rstudio/foobar rocker/rstudio
Esto no funciona (donde P es la ubicación asignada de la unidad de red): docker run -d -p 8787:8787 -v //p:/home/rstudio/foobar rocker/rstudio
Esto tampoco funciona: docker run -d -p 8787:8787 -v //10.1.11.###/projects:/home/rstudio/foobar rocker/rstudio
¿Alguna sugerencia?
Soy relativamente nuevo en Docker, así que hágamelo saber si no estoy siendo totalmente claro.
Sé que esto es relativamente antiguo, pero por el bien de los demás, esto es lo que suele funcionar para mí. para su uso: usamos un servidor de archivos de Windows, por lo que usamos cifs-utils para mapear la unidad. Supongo que las instrucciones a continuación se pueden aplicar a nfs o cualquier otra cosa también.
primero: debe ejecutar el contenedor en modo privilegiado para que pueda montar carpetas remotas dentro del contenedor (es posible que no se requiera el indicador --dns
)
docker run --dns <company dns ip> -p 8000:80 --privileged -it <container name and tag>
ahora, (asumiendo centos con cifs y siendo root en el contenedor) - salte al contenedor y ejecute:
instale cifs-utils si aún no está instalado
yum -y install cifs-utils
crear el directorio local para ser mapeado
mkdir /mnt/my-mounted-folder
preparar un archivo con nombre de usuario y credenciales
echo "username=<username-with-access-to-shared-drive>" > ~/.smbcredentials
echo "password=<password>" > ~/.smbcredentials
mapear la carpeta remota
mount <remote-shared-folder> <my-local-mounted-folder> -t cifs -o iocharset=utf8,credentials=/root/.smbcredentials,file_mode=0777,dir_mode=0777,uid=1000,gid=1000,cache=strict
ahora deberías tener acceso
espero que esto ayude..
He estado buscando la solución los últimos días y solo conseguí que funcionara.
Estoy ejecutando el contenedor docker en una máquina virtual ubuntu y estoy asignando una carpeta en otro host en la misma red que ejecuta Windows 10, pero estoy casi seguro de que el sistema operativo donde se ejecuta el contenedor no es un problema porque el mapeo es del propio contenedor, así que creo que esta solución debería funcionar en cualquier SO.
Vamos a codificar.
Primero debes crear el volumen.
docker volume create --driver local --opt type=cifs --opt device=//<network-device-ip-folder> --opt o=user=<your-user>,password=<your-pw> <volume-name>
Y luego tienes que ejecutar un contenedor desde una imagen.
docker run --name <desired-container-name> -v <volume-name>:/<path-inside-container> <image-name>
Después de esto, se ejecuta un contenedor con el volumen asignado y se asigna a . Creas algún archivo en cualquiera de estas carpetas y se replicará automáticamente a la otra.
Por si alguien quiere poner esto en marcha desde docker-compose dejo esto por aquí
services: <image-name>: build: context: . container_name: <desired-container-name> volumes: - <volume-name>:/<path-inside-container> ... volumes: <volume-name>: driver: local driver_opts: type: cifs device: //<network-device-ip-folder> o: "user=<your-user>,password=<your-pw>"
Espero poder ayudar
Escribiré mi decisión. Tengo un Synology NAS. La carpeta compartida utiliza el protocolo smb. Logré conectarlo de la siguiente manera. Lo más importante fue escribir la versión 1.0 (vers=1.0). ¡No funcionó sin él! Traté de resolver el problema durante 2 días.
version: "3" services: redis: image: redis restart: always container_name: 'redis' command: redis-server ports: - '6379:6379' environment: TZ: "Europe/Moscow" celery: build: context: . dockerfile: celery.dockerfile container_name: 'celery' command: celery --broker redis://redis:6379 --result-backend redis://redis:6379 --app worker.celery_worker worker --loglevel info privileged: true environment: TZ: "Europe/Moscow" volumes: - .:/code - nas:/mnt/nas links: - redis depends_on: - redis volumes: nas: driver: local driver_opts: type: cifs o: username=user,password=pass,**vers=1.0** device: "//192.168.10.10/main"