繁体   English   中英

Docker 运行卷:找不到目录

[英]Docker Run Volume : Can't Find Directory

我确定我会听起来像个大白痴,但我很难理解 Docker 卷是如何工作的。

我有以下 Dockerfile

FROM centos:7
MAINTAINER Giant Idiot

RUN yum -y update && \
    yum -y install epel-release vim && \
    rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

VOLUME /opt/my_vol

RUN echo "root:root" | chpasswd && \
    yum -y install openssh-server && \
    mkdir -p /var/run/sshd && \
    sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config && \
    ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N ''

RUN yum clean all

EXPOSE 22

COPY supervisord.conf /tmp/
RUN yum -y install supervisor && \
    mkdir -p /etc/supervisor/conf.d && \
    mv /tmp/supervisord.conf /etc/supervisor/conf.d
CMD /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf

其中包括创建 /opt/my_vol 的 VOLUME 命令,当我运行它时,我 map 卷如下所示(至少我认为这就是我正在做的)

docker run -d -p 221:22 -v my_vol:/opt/my_vol --name my_dock_r1 my_dock

当我登录到图像时,我可以看到 /opt/my_vol 目录很好,当我执行以下命令时,一切看起来都很好

docker volume ls
DRIVER      VOLUME NAME
local       my_vol

docker volume inspect my_vol
[
  {
    "Driver": "local",
    "Labels": null,
    "Mountpoint": "/mnt/sda1/var/lib/docker/volumes/my_vol/_data",
    "Name": "my_vol",
    "Options": null,
    "Scope": "local"
  }
]

我对此感到满意(或不满意,因为它可能是错误的),但 Mountpoint 对我来说没有意义。

我认为它将它安装到我的文件系统(Windows 10)并且没有这样的目录。 在那种情况下,它是否将它安装在我可以在文件系统上找到它的地方,或者我对此的理解是错误的?

我正在使用 Docker 的 VirtualBox 版本,我不确定这是否有什么不同

如果需要直接从主机访问卷的内容,则必须使用绑定挂载语法

docker run ... -v $PWD/my_vol:/opt/my_vol ...

您在MountPoint docker volume inspect命令中显示的 MountPoint 是内部实现细节。 在非 Linux 主机(使用 Linux 容器)上,它隐藏在虚拟机中; 即使在本机 Linux 主机上直接访问/var/lib/docker中的任何文件系统内容也不是最佳实践。

VOLUME放在 Dockerfile 中最明显的影响是它将阻止任何后续RUN命令修改该目录树。 您不需要将内容安装到容器中,我强烈建议您删除它(除非您 100% 清楚它的作用以及您想要它的原因)。

(Remember that anyone who has your image can trivially extract the ssh host keys and start their own ssh daemon impersonating your server. There are several significant security issues trying to run an sshd in Docker, including this, and I'd suggest avoiding it if完全有可能。)

似乎错误是由于它是 VirtualBox Docker (它被称为 Docker Container)。

为了挂载卷,必须将它们添加到 VirtualBox 设置中。 从 VirtualBox GUI

设置

共享文件夹

添加文件夹(最右侧带有加号的小文件夹)

在提示中添加文件夹

文件夹路径:C:/Some/Directory

文件夹名称:c/Some/Directory

自动安装:选中

永久化:选中

然后重新启动VirtualBox,然后以下命令有效

docker run -d -p 221:22 -v //c/VMDocker/Vol:/opt/my_vol --name my_dock_r1 my_dock

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM