如何在Docker for Windows中安装网络卷(Windows 10)

时间:2017-02-17 00:43:35

标签: windows docker

我们正致力于创建标准数据科学" Docker中的图像,以帮助我们的团队保持一致的环境。为了使这对我们有用,我们需要容器具有对我们公司网络的读/写访问权限。如何将网络驱动器安装到docker容器?

以下是我尝试使用Docker Hub的摇杆/ rstudio影像的方法:

这有效:

docker run -d -p 8787:8787 -v //c/users/{insert user}:/home/rstudio/foobar rocker/rstudio

这不起作用(其中P是网络驱动器的映射位置): docker run -d -p 8787:8787 -v //p:/home/rstudio/foobar rocker/rstudio

这也不起作用: docker run -d -p 8787:8787 -v //10.1.11.###/projects:/home/rstudio/foobar rocker/rstudio

有什么建议吗?

我对Docker来说比较新,所以如果我不完全清楚,请告诉我。

4 个答案:

答案 0 :(得分:2)

我知道这是比较古老的-但是为了他人-这通常适合我。使用-我们使用Windows文件服务器,因此我们使用cifs-utils来映射驱动器。我认为以下说明也可以应用于nfs或其他任何东西。

首先-需要在特权模式下运行容器,以便可以在容器内安装远程文件夹(可能不需要--dns标志)
docker run --dns <company dns ip> -p 8000:80 --privileged -it <container name and tag>

现在,(假设带有CIF的centos并在容器中成为root)-跳入容器并运行:

如果尚未安装,请安装cifs-utils
yum -y install cifs-utils

创建要映射的本地目录
mkdir /mnt/my-mounted-folder

使用用户名和凭据准备文件
echo "username=<username-with-access-to-shared-drive>" > ~/.smbcredentials
echo "password=<password>" > ~/.smbcredentials

映射远程文件夹
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

现在您应该可以访问

希望这会有所帮助。

答案 1 :(得分:2)

除了Windows docker映像外,我的情况相同。我已在Windows Server 2016上安装了Docker EE。已将外部SMB共享作为网络驱动器安装在“ Z:”上,并在执行docker run命令时尝试使用相同的共享库。但是docker容器无法找到路径'Z:'。

尝试了以下选项,但没有一个起作用。请告知:

选项1:-卷“ Z:\ repository:C:\ repository”

选项2:--mount type = bind,source = Z:\ repository,target = C:\ repository

选项3:-卷“ \\远程服务器SMB的IP \ Shared-Storage \ repository:C:\ repository”

选项4:-卷“ \\ FQDN-Remote-Server-SMB \ Shared-Storage \ repository:C:\ repository”

此外,特权模式在Windows上似乎不起作用。

答案 2 :(得分:1)

最近几天我一直在寻找解决方案,但我只能解决一个问题。

我在ubuntu虚拟机上运行docker容器,并且正在映射运行Windows 10的同一网络上其他主机上的文件夹,但是我几乎可以确定容器正在运行的操作系统不是问题因为映射来自容器本身,所以我认为该解决方案应该可以在任何SO中使用。

让我们的代码。

首先,您应该创建该卷

docker volume create 
--driver local 
--opt type=cifs 
--opt device=//<network-device-ip-folder>
--opt o=user=<your-user>,password=<your-pw>
<volume-name>

然后您必须从图像运行容器

 docker run 
 --name <desired-container-name> 
 -v <volume-name>:/<path-inside-container>
 <image-name>

此后,容器将运行并为其分配了卷, 并映射到。 您在任何一个此文件夹中创建一些文件,它将被复制 自动移到另一个。

万一有人想让它从docker-compose运行,我离开 这里

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>"

希望我能帮忙

答案 3 :(得分:1)

我会写下我的决定。我有一个 Synology NAS。共享文件夹使用 smb 协议。 我设法通过以下方式连接它。最重要的是编写版本 1.0 (vers=1.0)。没有它就行不通!我试图解决这个问题 2 天。

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"