一尘不染

volume_from指令-docker撰写

docker

使用以下docker-compose.yml文件:

test:
  build: ../../
  dockerfile: docker/dev/Dockerfile
  volumes_from:
    - cachev

cachev:
  build: ../../
  dockerfile: docker/dev/Dockerfile
  volumes:
    - /build
  entrypoint: "true"

cachev上面文件中的服务启动了卷容器,该卷容器/var/lib/docker/在Docker主机的文件夹中创建了匿名卷,并/cache在卷容器(xx_cachev)中创建了挂载点。


服务中的volumes_from指令是否在容器中test创建/build安装点xx_test?这点/build挂载点xx_cachev的容器?


阅读 480

收藏
2020-06-17

共1个答案

一尘不染

volumes_from 文档

从另一个服务或容器挂载所有卷…

所以简短的答案

volumes_from``/buildcachev服务内部 装入由服务定义的卷test

长答案:

要回答您的问题,让我们运行该test服务:

docker compose up test

在回答您的问题之前,让我们确保描述清楚:

上面文件中的cachev服务启动卷容器…

这只是常规容器,由于会立即退出entrypoint: "true"

docker ps -a 应该显示:

ac68a33abe59 cache "true" 16 hours ago Exited (0) 4 minutes ago cache_1

但在退出之前,它会创建中指定的卷volumes:。因此,如果其他服务使用其卷(例如进行缓存),我们可以将其称为卷容器。

在Docker主机的/ var / lib / docker /文件夹中创建匿名卷

同意。- /build是匿名卷。可以通过查看所有容器安装来验证:

docker inspect [cachev_container_id] --format '{{json .Mounts}}' | jq

应该显示如下内容:

  {
    "Type": "volume",
    "Name": "1ec7ff7c72bfb5a3259ed54be5b156ea694be6c8d932bcb3fa6e657cbcaea378",
    "Source": "/var/lib/docker/volumes/1ec7ff7c72bfb5a3259ed54be5b156ea694be6c8d932bcb3fa6e657cbcaea378/_data",
        "Destination": "/build",
        "Driver": "local",
        "Mode": "",
        "RW": true,
        "Propagation": ""
      }

jq是在bash中处理json的好工具。安装它以使上面的命令起作用。

并在卷容器(xx_cachev)中创建安装点/ cache。

cachev: 您提供的服务规格中看不到任何安装迹象。

如果将映射添加- /tmp/cache:/cache到其volumes部分,然后docker compose up test再次运行并检查退出的容器,则应该看到:

  {
    "Type": "bind",
    "Source": "/tmp/cache",
    "Destination": "/cache",
    "Mode": "rw",
    "RW": true,
    "Propagation": "rprivate"
  }

请注意,docker inspect [cachev_service_id] --format '{{json .Mounts}}' | jq它将显示所有容器安装座,包括docker/dev/Dockerfile使用VOLUME说明中指定的安装座。

为了 回答您的问题, 我们需要检查test服务容器:

docker inspect [test_container_id] --format '{{json .Mounts}}' | jq

将显示所有指定的卷(docker/dev/Dockerfile如果有的话)以及所有cachev多亏了volumes_from指令的卷。

您可以看到testcache容器都具有:

  {
    "Type": "volume",
    "Name": "1ec7ff7c72bfb5a3259ed54be5b156ea694be6c8d932bcb3fa6e657cbcaea378",
    "Source": "/var/lib/docker/volumes/1ec7ff7c72bfb5a3259ed54be5b156ea694be6c8d932bcb3fa6e657cbcaea378/_data",
    "Destination": "/build",
    "Driver": "local",
    "Mode": "",
    "RW": true,
    "Propagation": ""
  }

在他们的坐骑中,这个体积在随后的 docker compose up test

2020-06-17