windows - Docker 运行卷:找不到目录
问题描述
我敢肯定我会听起来像个大白痴,但我很难理解 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 命令,当我运行它时,我会像下面那样映射卷(至少我认为这就是我正在做的)
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
内部实现细节。在非 Linux 主机(带有 Linux 容器)上,它隐藏在虚拟机中;即使在本机 Linux 主机上直接访问其中的任何文件系统内容/var/lib/docker
也不是最佳实践。
放入 Dockerfile 最明显的影响VOLUME
是它将阻止任何以下RUN
命令修改该目录树。您不需要将内容安装到容器中,我强烈建议您删除它(除非您 100% 清楚它的作用以及您想要它的原因)。
(请记住,任何拥有您的镜像的人都可以轻松提取 ssh 主机密钥并启动他们自己的 ssh 守护程序来模拟您的服务器。尝试在 Docker 中运行 sshd 存在几个重大的安全问题,包括这个,我建议避免它,如果完全有可能。)
推荐阅读
- sql - 在 Hive 中,有没有办法在同一个 XML 系列中解析多次出现的同一个标签?
- apache-ranger - Presto 和 Apache Ranger 的行级安全性
- sql - 当一列有多个值时,如何查找缺少的特定值?
- php - Braintree 集成错误:检测到 3DS 1.0 表单 POST 到 3DS 2.0 端点
- javascript - Instagram API onpost 事件
- reactjs - React 项目中对 API 端点的困惑
- django - 尽管我发送了正确的令牌,但 django rest-frame work jwt athentications 失败
- javascript - 我只想用正则表达式替换“”之外的字符
- css - 如何在平板模式下管理三个、五个或任何奇数个 Elementor 列?
- apache-kafka - MongoDB Kafka 连接器中的 delete.on.null.values 不起作用