是否可以 "combine" 命名卷并定义容器之间的路径? (docker 撰写)

Is it possible to "combine" naming volumes and defining the path between containers? (docker compose)

是否可以“组合”命名卷并定义容器之间的路径? (docker 撰写)

我得到一个 docker 包含多个需要共享卷的服务的组合文件。同时我想指定这些卷的路径以用于备份目的并控制数据驻留在哪个驱动器上。

目前我正在使用 .env 文件结合 docker-compose 文件来解决这个问题,如下所示。

文件.env:

VOLUME_SHARED=/home/docker_user/data_service

文件docker-compose.yml

version: '3.8'

services:
  service1:
    image: service1
    volumes:
      - ${VOLUME_SHARED}:/data

  service2:
    image: service2
    volumes:
      - ${VOLUME_SHARED}:/data

我知道有命名卷,但我找不到定义它们路径的方法。有没有办法找到 docker-compose 文件中的所有信息?

所以要说清楚,像下面这样的事情可能吗?

文件docker-compose.yml

version: '3.8'

services:
  service1:
    image: service1
    volumes:
      - shared_data:/data

  service2:
    image: service2
    volumes:
      - shared_data:/data

volumes:
  shared_data=/home/docker_user/data_service

合成文件reference nor in docker volume create command manual中也没有这样的功能。因此,您无法在创建卷时定义存储位置。

您可以更改所有 docker 个文件的位置(参见 )或使用绑定装载(就像您现在所做的那样)。

还有一个 hack 可以做你想做的事,但我不推荐它。在 Linux 上,您可以用指向其他地方的软 link 替换现有卷。

# move the volume to a new location
mv /var/lib/docker/volumes/postgres_volume/ /root
# replace it with a soft link
ln -sv /root/postgres_volume/ /var/lib/docker/volumes/postgres_volume