如何在 Guest OS 和 Docker 容器之间绑定目录?

How to bind a directory between Guest OS and Docker container?

环境是 Ubuntu 18.04.5 LTS 虚拟机 运行 在我的 Windows 10 PC 上的 VirtualBox 中。

我遇到的问题是当我 运行 docker 图像并使用“-v”标志将 Ubuntu 中的目录绑定到 docker 容器,我没有收到任何错误,但目录中的任何更改都不会反映在容器中。

关于如何解决这个问题有什么建议吗?

供参考,在项目目录中,这是我尝试执行的命令 运行

sudo docker run -v $PWD/src:/src -p 80:80 getting-started

其中 src 包含以下 php 文件,我尝试修改该文件以查看更改:

<?php
echo "Hello, World!";

用于创建图像的 docker 文件包含以下内容:

FROM php:apache
COPY src/ /var/www/html/
EXPOSE 80

同样导航到 docker 集装箱码头后,我看不到我挂载的文件夹。

Docker 将 /src:/src 解释为将主机文件系统根目录 /src 挂载到容器的 /src 目录。

根据您的 Docker 文件,您似乎想将 src 挂载到本地目录。

编辑: 从下面的评论中,我最初的 -v 语法错误。相反,您需要使用绝对路径。您可以使用以下命令完成此操作

sudo docker run -v $PWD/src:/src -p 80:80 getting-started

请参阅 docs 关于绑定安装。

问题是我以 sudo 身份执行 docker 运行 命令,这意味着作为普通用户我无法编辑该文件夹,因此没有传播任何更改。

为了解决我只是将我的普通非 root 用户添加到 docker 组重新启动 VM 并再次尝试使用目录绑定的 运行 命令并且它运行完美!

以下命令将用户添加到 docker 组:

sudo usermod -aG docker $USER

用您的用户名替换 $USER

有关详细信息,请参阅:Add non root user to docker group