Docker 命名卷

Jum*_*mpa 0 docker docker-compose docker-volume

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

volumes:
  /mnt/volume-part1:/volume
  conf:
  vhost:
  html:
  certs:
Run Code Online (Sandbox Code Playgroud)

然后我想参考容器内的体积......

yam*_*enk 5

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

version: "3"

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

volumes:
  data-volume:
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,命名卷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
Run Code Online (Sandbox Code Playgroud)

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