如何在 Windows 的 Docker 中实际绑定挂载文件

问题描述 投票:0回答:3

我正在尝试按照此处的文档更新sebp/elkLogstash配置。我遇到了一种情况,我尝试挂载的主机文件正在作为容器中的目录挂载。

我发现了这个相关问题如何在卷中安装单个文件但是使用 PWD 运行的概念在 Windows 上对我不起作用,因为我收到以下错误:

C:\Program Files\Docker\Docker\Resources\bin\docker.exe: invalid reference format

我在 Windows 10(内部版本 16299.192)上运行 Docker

λ docker version
Client:
 Version:      17.09.1-ce
 API version:  1.32
 Go version:   go1.8.3
 Git commit:   19e2cf6
 Built:        Thu Dec  7 22:22:26 2017
 OS/Arch:      windows/amd64

Server:
 Version:      17.09.1-ce
 API version:  1.32 (minimum version 1.12)
 Go version:   go1.8.3
 Git commit:   19e2cf6
 Built:        Thu Dec  7 22:28:28 2017
 OS/Arch:      linux/amd64
 Experimental: true

我的 Docker 运行命令是:

docker run -p 5601:5601 -p 9200:9200 -p 5044:5044 -it -v d:/docker/elk/logstash-snmp.conf:/etc/logstash/conf.d/logstash-snmp.conf --rm --name elk sebp/elk

我已经能够在该磁盘上运行具有持久存储的其他容器(SQL Server、Redis、Exist-DB),但我不确定是否遗漏了一些内容。我如何告诉 Docker 实际上将其挂载为文件而不是目录。

docker docker-volume
3个回答
8
投票

如果您使用的是 Windows,则映射路径时会出现问题。我在 Windows 上使用 Git bash 终端,对我有用的命令就是这种格式。

  1. 将名为runtime_config.yml的文件从主机复制到容器。主机路径通过使用 PWD 给出相对路径,如下所示。并且容器路径是从根开始的。
docker run -d -p 5000:5000 -v "/${PWD}/etc/runtime_config.yml":/demand_forecast/etc/runtime_config.yml ....
  1. 将名为 etc 的目录从主机复制到容器。主机路径通过使用 PWD 给出相对路径,如下所示。并且容器路径是从根开始的。
docker run -d -p 5000:5000 -v "/${PWD}/etc/":/demand_forecast/etc/ ....

注意主机路径开头的 / ,这非常重要,否则会遇到错误。


5
投票

这对我有用:

注意:此方法适用于带有 Docker Toolbox 和 VirtualBox 的 W10 家庭版。

概述:在本地计算机中创建一个文件夹,将其挂载为 Docker VM 中的共享文件夹,使用此共享文件夹作为 Docker 容器的绑定挂载。

  1. 使用
    docker-machine stop default
  2. 停止 docker VM
  3. 打开 VirtualBox,找到
    default
    转到
    Settings > Shared Folder
  4. 您会看到
    c/Users
    已绑定到您的
    c:\Users
  5. 添加新的共享文件夹,记下分配的名称。我们将其命名为[本地共享]
  6. 退出
    Settings
  7. docker-machine start default
  8. 一旦开始,
    docker-machine ssh default
  9. sudo vi /mnt/sda1/var/lib/boot2docker/profile
  10. 附加以下内容:

      # create a directory in VM
      mkdir /home/docker/[foldername]
      # mount/map shared folder on localmachine to directory
      sudo moun -t vboxsf -o uid=1000,gid=50 [local-shared] /home/docker/[foldername] 
    
  11. 保存并退出 ssh。

  12. docker-machine stop default
  13. docker-machine start default
    (或者可能是
    docker-machine restart default
  14. 现在
    docker container run -d -p 1234:6789 -v /[local-shared]/sub-dir:/[container-dir] dockerImage2Run

它应该有效。

参考:http://support.divio.com/local-development/docker/how-to-use-a-directory-outside-cusers-with-docker-toolbox-on-windowsdocker-for-windows


0
投票

我找到了在 Windows 上绑定挂载的最简单方法。 使用这种格式: docker container run -d -p 8080:80 -v /{Drive}/{Folder(Optional)}:/{Container Path}/{Target} --name your-wish your-image。 示例: docker container run -d -p 8080:80 -v /d/Container:/usr/share/nginx/html --name my-website nginx

注意:我已经在 D 盘创建了一个“Container”文件夹

© www.soinside.com 2019 - 2024. All rights reserved.