如何避免将目录名称自动添加到 docker-compose yml 中指定的多个 docker 卷中?

Aka*_*are 0 docker docker-compose docker-volume

我在 docker-compose.yml 中定义了两项服务,每一项都使用自己的命名卷。

这些卷不是预先创建的。我希望 docker 在容器首次启动后创建卷,并在以后的启动中重复使用相同的卷。

docker-compose.yml

    version: '2'
    services:
        db:
           container_name: db
           environment:
               POSTGRES_DB=new_db_name
           volumes:
               - pgdata:/var/lib/postgresql/data
        app:
           container_name: app
           depends_on:
               - db
           volumes:
               - appdata:/app/data
    volumes:
        pgdata
        appdata
Run Code Online (Sandbox Code Playgroud)

但是,执行 docker-compose up 命令后,docker 会将当前目录名称添加到卷中。

我希望 docker 将 docker-compose yml 中指定的确切名称分配给卷。

我在这里找到了一个解决方案:https ://stackoverflow.com/a/59066462/12496407

但是,我无法应用上述解决方案,因为我的 docker-compose.yml 中有多个卷,并且提到的解决方案仅考虑一个卷。

Tri*_*oan 5

从 3.4 版本开始,卷的名称可以在 docker-compose 文件中指定,如下所示:

version: "3.9"
volumes:
  data:
    name: my-app-data
Run Code Online (Sandbox Code Playgroud)

该名称将按原样使用。有关更多信息,请查看此文档

所以,你的 docker-compose 应该是这样的:

# Make sure that the version is from 3.4
version: '3.9'
services:
  db:
    container_name: db
    environment: POSTGRES_DB=new_db_name
    volumes:
      - 'pgdata:/var/lib/postgresql/data'
  app:
    container_name: app
    depends_on:
      - db
    volumes:
      - 'appdata:/app/data'
volumes:
  pgdata:
    name: my-pgdata # Set volume name
  appdata:
    name: my-appdata # Set volume name

Run Code Online (Sandbox Code Playgroud)