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

How to avoid auto-prepend of directory name to multiple docker volumes specified in docker-compose yml?

我在 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

但是,在执行 docker-compose up 命令后,docker 是 prepending 当前目录名到卷。

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

我在这里找到了一个解决方案:

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

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

version: "3.9"
volumes:
  data:
    name: my-app-data

名称将按原样使用。更多信息,请查看this documentation.

所以,你的 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