我需要使命名卷使用执行docker-compose
命令的文件夹的相对路径。
这是docker-compose.yml
中的卷定义volumes:
esdata1:
driver: local
driver_opts:
type: none
device: ./esdata1
o: bind
似乎是docker-compose do not create the folder if it does not exist,但即使在推出docker之前创建了文件夹,我也总是收到此错误:
ERROR: for esdata Cannot create container for service esdata: error while mounting volume with options: type='none' device='./esdata1' o='bind': no such file or directory
注意:这可能很愚蠢,但esdata
是使用指定卷的服务
esdata:
...
volumes:
- esdata1:/usr/share/elasticsearch/data
...
我在这里失踪了什么?
也许相对路径./
没有指向执行docker-compose
的文件夹(我已尝试使用~/
来使用相对于用户的文件夹'}回家,但我得到了同样的错误。)
提前致谢,
PS:如果我使用绝对路径,它就像魅力一样
答案 0 :(得分:0)
我遇到了完全相同的问题。看来您没有做错任何事。这只是尚未在Docker中实现:https://github.com/docker/compose/issues/6343
对于可移植性不是很好...
答案 1 :(得分:0)
如果使用这样的命名绑定安装,则必须包含文件的完整路径,例如:
volumes:
esdata1:
driver: local
driver_opts:
type: none
device: /home/username/project/esdata1
o: bind
该文件夹也必须预先存在。这就是linux bind mount syscall的工作方式,当您传递这样的标志时,您将直接与Linux通信,而无需通过docker或compose进行任何路径扩展。
如果您只想从主机上挂载目录,则可以通过撰写以下内容扩展用于相对路径的主机卷:
esdata:
...
volumes:
- ./esdata1:/usr/share/elasticsearch/data
...
虽然主机卷更易于移植,因为该路径会自动扩展,但您将失去命名卷的功能,其中docker使用映像内容(包括文件权限/所有权)初始化了一个空的命名卷。