docker - 无法在 Windows 10 上使用 Docker Toolbox 共享/挂载卷

标签 docker dockerfile

我正在尝试使用 docker 设置我的项目。我在 Windows 10 家庭版上使用 Docker Toolbox。我对 docker 很陌生。据我了解,我必须将文件复制到新容器并添加一个卷,以便我可以保留 gulp 所做的更改。

这是我的文件夹结构

-- src
|- dist
|- node-modules
|- gulpfile.js
|- package.json
|- Dockerfile

Dockerfile 代码

FROM node:8.9.4-alpine
RUN npm install -g gulp
CMD [ "ls", 'source' ]

我尝试了许多*docker run -v *的解决方案

例如

docker run -v /$(pwd):/source <container image>
docker run -v //c/Users/PcUser/Desktop/proj:/source <container image>
docker run -v //c/Users/PcUser/Desktop/proj:/source <container image>
docker run -v //d/proj:/source <container image>
docker run -v /d/proj:/source <container image>

*但运气不好*

任何人都可以描述一下您将如何使用相同的结构为自己设置它。为什么我无法挂载我的主机文件夹。

P.S:如果我使用两个容器,一个用于使用 gulp 编译代码,另一个使用 nginx 来提供 dist 文件夹的内容。我将如何做到这一点。

最佳答案

@sxm1972 感谢您的努力和帮助。

您可能使用的是 Windows Pro 或服务器版本。我使用的是Windows 10 家庭版

这是我解决问题的方法,以便其他使用相同设置的人可以解决他们的问题。

There may be a better way to solve this, please comment if there is an efficient way.

所以...

首先,问题...为什么我在容器中看不到 PC 上的共享卷。

Ans:如果我们将 docker 的 Boot2Docker 与 VirtualBox(我就是)一起使用,那么每当安装卷时,它都会引用 Boot2Docker VM 内的文件夹

Image: Result of -v with docker in VirtualBox Boot2Docker

因此,如果我们尝试使用 $ ls它将显示一个空文件夹,在我的例子中它就是这样。

因此,如果我们想将文件从 Windows 环境共享到容器,我们必须实际将文件夹挂载到 Boot2Docker VM

Image: Resulting Mounts Window <-> Boot2Docker <-> Container

要实现此目的,我们必须使用以下命令将文件夹手动安装到虚拟机 command

vboxmanage sharedfolder add default --name "<folder_name_on_vm>" --hostpath "<path_to_folder_on_windows>" --automount

如果运行命令时出现错误,提示未找到 vboxmanager,请将虚拟框文件夹路径添加到系统路径中。对我来说是C:\Program Files\Oracle\VirtualBox

运行命令后,您将看到 <folder_name_on_vm>root 。您可以通过docker-machine ssh default查看然后ls / 。确认文件夹<folder_name_on_vm>后存在,您可以将其用作容器的卷。

docker run -it -v /<folder_name_on_vm>:/source <container> sh

希望这有帮助......!

P.S 如果你觉得懒,不想挂载文件夹,你可以将你的项目放在 C:/Users 中文件夹,因为它默认安装在虚拟机上,如 image 中所示。

关于docker - 无法在 Windows 10 上使用 Docker Toolbox 共享/挂载卷,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48828406/

相关文章:

docker - Docker不添加此类文件或目录

docker - 在 Docker 中设置 GOOGLE_APPLICATION_CREDENTIALS

docker - Dockerfile 中的开发依赖项或用于生产和测试的单独 Dockerfile

python - "ModuleNotFoundError: No module named <package>"在我的 Docker 容器中

docker - Docker-如何动态配置使用纯文本配置文件的应用程序?

python - 找不到docker discord.py ffmpeg.exe

docker - docker和host之间的PID映射

docker - Visual Studio 2022 无法在 docker 上启动应用程序

pip - 使用 github 操作在 docker builder 中缓存 pip 依赖项

docker - Kubernetes:指定一个 tarball docker 镜像来运行 pod