如何在 Docker 中为 Windows 实际绑定挂载文件
How to actually bind mount a file in Docker for Windows
我正在尝试更新此处的 sebp/elk Logstash configuration following the documentation。我正在 运行 遇到这样一种情况,我尝试挂载的主机文件被挂载为容器中的一个目录。
我发现了这个相关问题 但 运行 PWD 的概念在 Windows 上对我不起作用,因为我收到以下错误:
C:\Program Files\Docker\Docker\Resources\bin\docker.exe: invalid reference format
我 运行正在 Docker Windows 10(内部版本 16299.192)
λ 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 服务器、Redis、Exist-DB),但我不确定我是否缺少一些东西。我如何告诉 Docker 将其实际挂载为文件而不是目录。
这对我有用:
注意:此方法使用 Docker 工具箱和 VirtualBox 解决 W10 家庭版。
概述:在本地机器上创建一个文件夹,将其挂载为 Docker VM 中的共享文件夹,使用此共享文件夹作为绑定到 Docker 容器。
- 使用
docker-machine stop default
停止 docker 虚拟机
- 打开VirtualBox,找到
default
转到Settings > Shared Folder
- 您会看到
c/Users
绑定到您的 c:\Users
- 添加一个新的共享文件夹,记下分配给它的名称。我们将其命名为 [local-shared]
- 退出
Settings
docker-machine start default
- 一旦开始,
docker-machine ssh default
sudo vi /mnt/sda1/var/lib/boot2docker/profile
追加以下内容:
# 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]
保存并退出ssh。
docker-machine stop default
docker-machine start default
(或者 docker-machine restart default
)
- 现在
docker container run -d -p 1234:6789 -v /[local-shared]/sub-dir:/[container-dir] dockerImage2Run
它应该可以工作。
如果您在 windows,映射路径时出现问题。我在 windows 上使用 Git bash 终端,对我有用的命令就是这种格式。
- 将名为 runtime_config.yml 的文件从主机复制到容器。主机路径是通过使用 PWD 给出的相对路径,如下所示。并且容器路径来自root。
docker run -d -p 5000:5000 -v "/${PWD}/etc/runtime_config.yml":/demand_forecast/etc/runtime_config.yml ....
- 将名为 etc 的目录从主机复制到容器。主机路径是通过使用 PWD 给出的相对路径,如下所示。并且容器路径来自root。
docker run -d -p 5000:5000 -v "/${PWD}/etc/":/demand_forecast/etc/ ....
注意主机路径开头的/,这个很重要,否则会运行出错。
我正在尝试更新此处的 sebp/elk Logstash configuration following the documentation。我正在 运行 遇到这样一种情况,我尝试挂载的主机文件被挂载为容器中的一个目录。
我发现了这个相关问题 C:\Program Files\Docker\Docker\Resources\bin\docker.exe: invalid reference format
我 运行正在 Docker Windows 10(内部版本 16299.192)
λ 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 服务器、Redis、Exist-DB),但我不确定我是否缺少一些东西。我如何告诉 Docker 将其实际挂载为文件而不是目录。
这对我有用:
注意:此方法使用 Docker 工具箱和 VirtualBox 解决 W10 家庭版。
概述:在本地机器上创建一个文件夹,将其挂载为 Docker VM 中的共享文件夹,使用此共享文件夹作为绑定到 Docker 容器。
- 使用
docker-machine stop default
停止 docker 虚拟机
- 打开VirtualBox,找到
default
转到Settings > Shared Folder
- 您会看到
c/Users
绑定到您的c:\Users
- 添加一个新的共享文件夹,记下分配给它的名称。我们将其命名为 [local-shared]
- 退出
Settings
docker-machine start default
- 一旦开始,
docker-machine ssh default
sudo vi /mnt/sda1/var/lib/boot2docker/profile
追加以下内容:
# 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]
保存并退出ssh。
docker-machine stop default
docker-machine start default
(或者docker-machine restart default
)- 现在
docker container run -d -p 1234:6789 -v /[local-shared]/sub-dir:/[container-dir] dockerImage2Run
它应该可以工作。
如果您在 windows,映射路径时出现问题。我在 windows 上使用 Git bash 终端,对我有用的命令就是这种格式。
- 将名为 runtime_config.yml 的文件从主机复制到容器。主机路径是通过使用 PWD 给出的相对路径,如下所示。并且容器路径来自root。
docker run -d -p 5000:5000 -v "/${PWD}/etc/runtime_config.yml":/demand_forecast/etc/runtime_config.yml ....
- 将名为 etc 的目录从主机复制到容器。主机路径是通过使用 PWD 给出的相对路径,如下所示。并且容器路径来自root。
docker run -d -p 5000:5000 -v "/${PWD}/etc/":/demand_forecast/etc/ ....
注意主机路径开头的/,这个很重要,否则会运行出错。