簡體   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