Docker 命名卷

Docker Named Volumes

在 docker compose v3 中混合使用和不使用本地主机路径的命名卷的正确方法是什么? 这样我就得到了 YML 错误:

volumes:
  /mnt/volume-part1:/volume
  conf:
  vhost:
  html:
  certs:

那我想参考容器内的体积...

对于命名卷,您需要在撰写文件的专用卷部分下声明卷名。对于挂载,您无需在该部分中声明它: 考虑以下撰写文件:

version: "3"

services:
  db:
    image: db
    volumes:
      - data-volume:/var/lib/db
      - /mnt/volume-part1:/volume

volumes:
  data-volume:

如您所见,命名卷 data-volume 需要在分配到容器之前在卷部分中声明。 而目录挂载是直接挂载到容器上。

更新

如果您不想在所有容器上复制机器路径,您可以使用一个巧妙的技巧来指定命名卷的确切创建位置:

version: "3"

services:
  db:
    image: db
    volumes:
      - data-volume:/var/lib/db
      - volume-part1:/volume

volumes:
  data-volume:
  volume-part1:
   driver_opts:
     type: none
     device: /mnt/volume-part1
     o: bind

正如您在上面看到的,我们已经创建了一个命名卷 volume-part1 并指定了该卷在主机上的备份位置。