无法将主机文件夹挂载到亚马逊Docker容器中?

3

我正在使用一个EC2实例来运行Docker。从我的本地机器使用OSX,我正在使用docker machine创建容器和卷。但是当我尝试将本地文件夹挂载到任何容器时,都无法实现。

docker create -v /data --name data-only-container ubuntu /bin/true
docker run -it --volumes-from data-only-container -v $(pwd)/data:/backup ubuntu bash

使用第一个命令我创建了一个数据容器,然后使用第二个命令进入这个容器。这个容器应该包含了数据容器的卷和我要挂载的卷,但是当我访问/backup文件夹时它是空的。
我做错了什么?
编辑: 我试图挂载主机文件夹以便将备份数据从我的电脑恢复到容器中。在这种情况下,有没有不同的方法?
我应该尝试使用Flocker吗?
1个回答

2
使用-v /path/to/dir:/container/mnt挂载主机卷会在容器内部挂载来自docker主机的目录。当在OSX系统上运行此命令时,$(pwd)/data将引用本地计算机上不存在于docker主机(EC2实例)中的目录。如果您登录EC2实例,可能会发现$(pwd)/data目录已经被创建但为空。
如果您想将OSX系统中的文件夹挂载到docker容器中,您需要在OSX系统上运行Docker。
编辑:为了回答如何将数据移动到云中的容器的问题,通常有一些方法可以将数据移动到云提供商本身,而不是通过docker,然后直接将其包含在容器内。要执行仅使用docker的操作,您可以执行以下操作:
tar -cC /source . | \
docker run --rm -i -v app-data:/target busybox \
  /bin/sh -c "tar -xC /target"

这将使用tar在管道中上传数据到您的Docker主机上的命名卷。然后,您可以在任何其他容器中包含名为“app-data”的卷。如果您需要多次执行此操作并使用更大的数据集,则创建一个rsync容器将更加高效。

事实上,我只在AWS的Docker主机上得到了$(pwd)的副本。你说的“在OSX系统本身上运行Docker”我不太明白你的意思。你是说只能在Virtual Box上运行吗? - Lt.
运行容器的Docker主机需要在该主机上可见文件系统,以便能够将其共享到正在运行的容器中。因此,要执行基于主机的卷并从您的OSX框中共享文件,使用Docker beta或Virtualbox运行容器是最好的方法。对于高级用户,还有其他docker volume drivers可以让您连接到除主机、容器或命名卷之外的其他内容。 - BMitch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接