我已经在docker-compose.yml文件中看到了Docker卷定义,如下所示:

-v /path/on/host/modules:/var/www/html/modules

我注意到Drupal's official image,他们的docker-compose.yml文件正在使用anonymous volumes

注意评论:
volumes:
  - /var/www/html/modules
  - /var/www/html/profiles
  - /var/www/html/themes
  # this takes advantage of the feature in Docker that a new anonymous
  # volume (which is what we're creating here) will be initialized with the
  # existing content of the image at the same location
  - /var/www/html/sites

在容器运行后,是否可以将匿名卷与主机上的路径相关联?如果没有,拥有匿名卷的意义何在?

完整的docker-compose.yml示例:
version: '3.1'

services:

  drupal:
    image: drupal:8.2-apache
    ports:
      - 8080:80
    volumes:
      - /var/www/html/modules
      - /var/www/html/profiles
      - /var/www/html/themes
      # this takes advantage of the feature in Docker that a new anonymous
      # volume (which is what we're creating here) will be initialized with the
      # existing content of the image at the same location
      - /var/www/html/sites
    restart: always

  postgres:
    image: postgres:9.6
    environment:
      POSTGRES_PASSWORD: example
    restart: always

最佳答案

添加更多信息以响应@JeffRSon的后续问题/评论,询问匿名卷如何增加灵活性,并通过OP回答此问题:



TL; DR :您可以通过“数据容器”将特定的匿名卷与正在运行的容器相关联,但这可以灵活地覆盖用例,现在通过使用命名卷可以更好地解决该用例。

在Docker 1.9中添加卷管理之前,匿名卷很有帮助。在此之前,您不能选择命名卷。在1.9版中,卷变成了具有各自生命周期的离散且可管理的对象。

在1.9之前,由于无法命名卷,您必须先创建一个数据容器来引用它

docker create -v /data --name datacontainer mysql

然后将数据容器的匿名卷安装到需要访问该卷的容器中
docker run -d --volumes-from datacontainer --name dbinstance mysql

如今,最好使用命名卷,因为它们更易于管理且更明确。

关于docker - Docker匿名卷,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44976571/

10-12 23:41