Docker运行卷:找不到目录

时间:2019-11-19 11:32:09

标签: windows docker virtualbox docker-volume

我确定我听起来会像个笨蛋,但是我很难理解Docker Volumes的工作原理。

我有以下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命令,当我运行它时,它像下面那样映射了Volume(至少我认为这就是我的工作)

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

当我登录到Image时,我可以看到/ 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)中,并且没有这样的目录。在那种情况下,它会将它安装在我可以在文件系统上找到它的位置,还是我对此理解不正确?

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

2 个答案:

答案 0 :(得分:1)

如果您需要直接从主机访问卷的内容,则必须使用bind mount语法

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

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

VOLUME放入Dockerfile的最明显的影响是,它将阻止后面的任何RUN命令修改该目录树。您不需要它就可以将内容装载到容器中,我强烈建议您删除它(除非您100%清楚了它的功能以及为什么要这么做)。

(请记住,拥有映像的任何人都可以平凡地提取ssh主机密钥并启动自己的ssh守护程序来模拟您的服务器。尝试在Docker中运行sshd时存在一些重大的安全问题,我建议这样做。尽可能避免它。)

答案 1 :(得分:0)

错误似乎是由于它是VirtualBox Docker(称为Docker容器)。

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

设置

共享文件夹

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

在提示中添加文件夹

文件夹路径:C:/某些/目录

文件夹名称:c / Some / Directory

自动安装:已选中

永久保存:已选中

然后重新启动VirtualBox,然后执行以下命令

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