我正在尝试将主机目录挂载到Docker容器中,以便在主机上完成的任何更新都会反映到Docker容器中.谷歌搜索和阅读Docker音量链接后,我无法成功.
我在哪里做错了什么.这是我做的:
kishore$ cat Dockerfile
FROM ubuntu:trusty
RUN apt-get update
RUN apt-get -y install git curl vim
CMD ["/bin/bash"]
WORKDIR /test_container
VOLUME ["/test_container"]
Run Code Online (Sandbox Code Playgroud)
kishore$ tree
.
??? Dockerfile
??? main_folder
??? tfile1.txt
??? tfile2.txt
??? tfile3.txt
??? tfile4.txt
1 directory, 5 files
kishore$ pwd
/Users/kishore/tdock
Run Code Online (Sandbox Code Playgroud)kishore$ docker build --tag=k3_s3:latest .
Uploading context 7.168 kB
Uploading context
Step 0 : FROM ubuntu:trusty
---> 99ec81b80c55
Step 1 : RUN apt-get update
---> Using cache
---> 1c7282005040
Step 2 : RUN apt-get -y …
Run Code Online (Sandbox Code Playgroud)Run Code Online (Sandbox Code Playgroud) 简而言之:我正在尝试在Docker中安装主机目录,但是我无法从容器内访问它,即使访问权限看起来很好.
细节:
我在做
sudo docker run -i -v /data1/Downloads:/Downloads ubuntu bash
Run Code Online (Sandbox Code Playgroud)
然后
ls -al
Run Code Online (Sandbox Code Playgroud)
它给了我:
total 8892
drwxr-xr-x. 23 root root 4096 Jun 18 14:34 .
drwxr-xr-x. 23 root root 4096 Jun 18 14:34 ..
-rwxr-xr-x. 1 root root 0 Jun 18 14:34 .dockerenv
-rwx------. 1 root root 9014486 Jun 17 22:09 .dockerinit
drwxrwxr-x. 18 1000 1000 12288 Jun 16 11:40 Downloads
drwxr-xr-x. 2 root root 4096 Jan 29 18:10 bin
drwxr-xr-x. 2 root root 4096 Apr 19 2012 boot …Run Code Online (Sandbox Code Playgroud) 原始问题:如何在Dockerfile中使用VOLUME指令?
修订:从下面的答案更新,所以我想解决的实际问题是 - 如何在构建期间将主机卷装入Dockerfile中的docker容器,即具有该docker run -v /export:/export功能docker build.
最新更新:请参阅新接受的答案,例如,v18.09中的Buildkit.
是的:有一个解决方案 - 摇杆,不是来自Docker,但现在摇杆已经停止,我将答案还原为"不可能".
更新:所以答案是"不可能".我可以接受它作为答案,因为我知道这个问题已在https://github.com/docker/docker/issues/3156上进行了广泛讨论.我可以理解,可移植性对于docker开发者来说是一个至关重要的问题; 但作为码头用户,我不得不说我对这个缺失的功能感到非常失望.让我通过前面讨论的引用来结束我的论点:" 我想使用Gentoo作为基本图像,但是一旦构建了图像,绝对不希望> 1GB的Portage树数据存在于任何层中.如果不是因为巨大的portage树必须在安装过程中出现在图像中,那么它可能会有一些不错的紧凑型容器. "是的,我可以使用wget或curl来下载我需要的任何内容,但事实上只是一个可移植性的考虑因素现在强迫我每次构建Gentoo基本图像时下载> 1GB的Portage树既不高效也不用户友好.此外,软件包存储库将始终位于/ usr/portage下,因此在Gentoo下始终是PORTABLE.我再一次尊重这个决定,但请允许我在同一时间表达我的失望.谢谢.
原始问题详情:
从
通过卷共享目录
http://docker.readthedocs.org/en/v0.7.3/use/working_with_volumes/
它表示数据卷功能"自Docker Remote API版本1以来已经可用".我的docker是版本1.2.0,但我发现上面文章中给出的示例不起作用:
# BUILD-USING: docker build -t data .
# RUN-USING: docker run -name DATA data
FROM busybox
VOLUME ["/var/volume1", "/var/volume2"]
CMD ["/usr/bin/true"]
Run Code Online (Sandbox Code Playgroud)
Dockerfile中通过VOLUME命令将主机挂载的卷挂载到docker容器中的正确方法是什么?
$ apt-cache policy lxc-docker
lxc-docker:
Installed: 1.2.0
Candidate: 1.2.0
Version table:
*** 1.2.0 0
500 https://get.docker.io/ubuntu/ docker/main amd64 Packages
100 …Run Code Online (Sandbox Code Playgroud) 我在挂起的Linux机器上有一个NFS挂载的目录.我试图强制卸载,但它似乎不起作用:
$ umount -f /mnt/data
$ umount2: Device or resource busy
$ umount: /mnt/data: device is busy
Run Code Online (Sandbox Code Playgroud)
如果我输入" mount",似乎该目录不再挂载,但如果我执行" ls /mnt/data" 它会挂起,如果我尝试删除挂载点,我会得到:
$ rmdir /mnt/data
rmdir: /mnt/data: Device or resource busy
Run Code Online (Sandbox Code Playgroud)
除了重启机器之外,还有什么可以做的吗?
是否有Linux命令可以轻松找出目录或文件所在的分区/挂载?
(这可能是一个RTM问题,我对此问题感到内疚,但不知何故,我还没有在Google上找到一个好的答案..)
让我的模拟器SD卡工作时我遇到了麻烦......我用新的SD卡创建了一个新的AVD设备.
那么如何将数据放到它上面呢?我发现要在Daemon工具上安装的"正确"文件,但是已损坏或根本无法读取...
如果你有任何想法会很棒:)
去年我一直在运行VMware没有问题,今天我打开它启动我的一个虚拟机并收到错误消息,看屏幕截图.
我确实按照链接执行了步骤,在步骤4中我需要使用"mountvol"安装卷.当我尝试使用mountvol X: \\?\Volume{5593b5bd-0000-0000-0000-c0f373000000}\它安装卷时,我一直说The directory is not empty.我甚至创建了一个2GB的分区,但仍然是相同的消息.
我的问题:
如何安装非空的卷,即使它是?
为什么这个Device/Credential Guard会自动启用它,如何摆脱它或禁用它.
FUSE 经常(每2到3天)Transport endpoint is not connected在我的挂载点上给我这个错误,似乎唯一能解决的问题就是重启.
我目前有这样的挂载点设置,我不知道我应该在这里添加什么其他细节所以如果我错过任何东西请告诉我..
/dev/sdc1 /mnt/hdd2 ext4 defaults 0 0
/dev/sdb1 /mnt/hdd1 ext4 defaults 0 0
mhddfs#/mnt/hdd1,/mnt/hdd2 /data fuse defaults,allow_other 0 0
Run Code Online (Sandbox Code Playgroud) 我在用
mount -o bind /some/directory/here /foo/bar
Run Code Online (Sandbox Code Playgroud)
我想/foo/bar用bash脚本检查一下,看看它是否已经挂载?如果没有,则调用上面的mount命令,否则执行其他操作.我怎样才能做到这一点?
CentOS是操作系统.
Linux:在执行umount时哪个进程导致"设备忙"?