繁体   English   中英

相对路径不适用于 docker-compose.yml 中的命名卷

[英]Relative path not working with named volumes in the docker-compose.yml

我需要使命名卷使用执行docker-compose命令的文件夹的相对路径。

这是 docker-compose.yml 中的卷定义

volumes:
  esdata1:
   driver: local 
   driver_opts:
      type: none
      device: ./esdata1
      o: bind

如果文件夹不存在,docker -compose似乎不会创建该文件夹,但即使在启动 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:如果我使用绝对路径,它就像一个魅力

我遇到了完全相同的问题。 看来你没有做错什么。 这还没有在 Docker 中实现: https : //github.com/docker/compose/issues/6343

便携性不是很好...

如果您使用这样的命名绑定挂载,则必须包含文件的完整路径,例如:

volumes:
  esdata1:
   driver: local 
   driver_opts:
      type: none
      device: /home/username/project/esdata1
      o: bind

该文件夹也必须提前存在。 这就是 linux 绑定挂载系统调用的工作方式,当您传递这样的标志时,您是在直接与 Linux 对话,而无需 docker 或 compose 进行任何路径扩展。

如果您只想从主机挂载目录,则使用主机卷将通过 compose 扩展为相对路径:

  esdata:
    ...
    volumes:
      - ./esdata1:/usr/share/elasticsearch/data
    ...

虽然由于路径自动扩展,主机卷更易于移植,但您将失去命名卷的功能,其中 docker 使用图像内容(包括文件权限/所有权)初始化一个空的命名卷。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM