我对docker有一点问题。 我试图在计算机上使用卷共享。我可以在计算机上看到这些文件,但是它们在我的容器中是空的。
我尝试在容器的/ root(共享卷之外)中创建一个文件,并且我可以看到该文件而没有任何问题。
如果我执行echo test > test.txt
(在我的共享卷中),则文件内容为空。
我执行此命令:
docker run -v "D:\My App:/home/app" -it MyImage /bin/bash
在/ home / app文件夹中,我可以在计算机上看到文件。但是如果我这样做:
cat /home/app/test.txt
它告诉我文件中没有任何内容。有文本时(文件存在)
如果从容器中创建文件,则在共享卷中,可以在计算机上找到该文件(该文件不为空)。 如果我从计算机上创建文件,则会在容器中找到它,但是当我尝试显示它时该文件为空。
当前,当我做一只猫test.txt
时,它什么也没显示。
这应该显示this is a test
答案 0 :(得分:0)
请先检查Docker的Windows设置:
如果您的D:\驱动器是不共享的,则在您的容器中看不到太多内容。
docker/for-win
issue 25指出了多个可能的问题:
如果您使用的是Docker Toolbox:
在我的案例中,Docker Toolbox在Virtualbox中创建了一个名为default的VM,并在VM中添加了Shared Folder;
Virtualbox -> default (VM) -> Settings -> Shared Folders -> Add
:然后,您可以在计算机中指定路径,也可以在VM中指定映射路径,例如:
- 第一个字段是您计算机中的路径,例如D:\ my \ app
- 第二个是VM中的路径,例如/ my-vm / app
- 选择自动安装
另一个:
我学习时遇到的一个问题是,尝试在容器中装入一个卷,但是有一个冲突的文件夹。
例如,我将创建工作目录/foo/bar
,然后尝试为/foo/bar/private
使用一个卷,但是在我的初始安装中已经有一个名为private的文件夹。
我不会看到任何错误,但是会看到第一个文件夹,而不是我的第二个卷
或者:
docker/for-win
issue 2151:“ 从Linux WSL实例挂载的卷无法在容器中解析”。
它指的是“ how to use Docker with WSL”。
我们需要做的最后一件事就是进行设置,以使卷挂载工作。这让我绊了一会儿,因为请检查一下……
使用WSL时,Docker for Windows希望您以与以下格式匹配的卷路径:
/c/Users/nick/dev/myapp
。但是,WSL不能那样工作。而是使用
/mnt/c/Users/nick/dev/myapp
格式。
老实说,我认为Docker应该更改使用/mnt/c
的路径,因为它可以更清楚地了解正在发生的事情,但这是又一次的讨论。