我正在尝试运行一个用于安装 hubic(在线存储)的 docker 镜像并将其公开给主机
到目前为止,有效的是容器正确安装保险丝点(至/mnt/hubic
)
运行 docker 时,我尝试使用卷映射运行,因为/path/on/host:/mnt/hubic
这似乎可行(即,如果目录不存在,docker 会创建目录),但内容永远不会出现。如果我进入容器,我可以看到来自在线存储的文件,但主机文件夹不包含任何内容
我是否缺少一个选项来允许 Docker 执行此操作?
我用来启动容器的命令
docker run -v ~/.hubicfuse:/root/.hubicfuse -v /tmp/mounted:/mnt/hubic --device /dev/fuse --cap-add SYS_ADMIN --security-opt apparmor:unconfined -it {container_name}
答案1
解决方案来自帖子 s3 安装在容器内部,如何向主机公开?
这篇文章描述了一种使用的解决方案glusterFS
,需要容器拥有更多权限。使用的 docker 命令:
docker run --cap-add SYS_ADMIN --device fuse -v host_mount_dir:container_mount_dir:shared IMAGE COMMAND
对于“路径 /foo 已挂载在 /foo 上,但它不是共享挂载...”之类的错误,原因是 docker 守护程序在与 systemd 不同的挂载命名空间中运行。这是使其在同一个命名空间中运行的解决方案:
mkdir -p /etc/systemd/system/docker.service.d/
cat <<EOF > /etc/systemd/system/docker.service.d/clear_mount_propagation_flags.conf
[Service]
MountFlags=shared
EOF
并重新启动docker守护进程。
需要注意的是,如果挂载到 绑定的目录中,则挂载在主机上可见-v
。