相对路径不与docker-compose.yml中的命名卷一起使用

时间:2017-03-22 19:43:20

标签: docker docker-compose

我需要使命名卷使用执行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:如果我使用绝对路径,它就像魅力一样

2 个答案:

答案 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使用映像内容(包括文件权限/所有权)初始化了一个空的命名卷。