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

7
我正在尝试更新 sebp/elk Logstash 配置,根据此处的 文档。我遇到了一个情况:我尝试挂载的主机文件在容器中被挂载为目录。
我找到了这个相关问题 如何在卷中挂载单个文件,但在 Windows 上运行 PWD 没有起作用,我遇到了以下错误: C:\Program Files\Docker\Docker\Resources\bin\docker.exe: invalid reference format 我在 Windows 10 (Build 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实际将其挂载为文件而不是目录。


只需为logstash创建一个文件夹并将其挂载到“conf.d”即可... Logstash实际上期望一个包含所有配置的文件夹。 - OneCricketeer
1
此外,PWD 应该在 PowerShell 中正常工作。https://dev59.com/DFgR5IYBdhLWcg3wT71M - OneCricketeer
2个回答

6
如果你在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 ....
  • 将名为etc的目录从主机复制到容器中。主机路径使用PWD相对给出,如下所示。容器路径从根目录开始。
  • docker run -d -p 5000:5000 -v "/${PWD}/etc/":/demand_forecast/etc/ ....
    

    请注意,在主机路径的开头加上/非常重要,否则您将遇到错误。

    1
    如果有人想在Powershell上运行相同的内容 docker run -p 9090:9090 -v "$(pwd)/test.yml:/etc/test/test.yml" <image> - GPuri

    5
    这对我很有用:
    注意:这种方法适用于使用Docker Toolbox和VirtualBox的W10家庭版。
    概述:在本地机器上创建一个文件夹,在Docker VM中将其挂载为共享文件夹,然后将此共享文件夹用作绑定到Docker容器的bindmount。
    1. Stop docker VM using docker-machine stop default
    2. Open VirtualBox, find default go to Settings > Shared Folder
    3. You will see c/Users is binded to your c:\Users
    4. Add a new shared folder, note the name it is assigned. Let's name this as [local-shared]
    5. Exit Settings
    6. docker-machine start default
    7. Once started, docker-machine ssh default
    8. sudo vi /mnt/sda1/var/lib/boot2docker/profile
    9. Append the following:

        # 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] 
      
    10. Save and exit ssh.

    11. docker-machine stop default
    12. docker-machine start default (or perhaps docker-machine restart default)
    13. now 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


    好的步骤。第13步需要更正,应该是/home/docker/[foldername]而不是[local-shared]。 - ndas

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接