PGAdmin 使用每个“docker-compose up”创建新的随机卷

Mal*_*ear 5 postgresql pgadmin docker pgadmin-4

每次我运行以下命令时:

> docker-compose up -d
Run Code Online (Sandbox Code Playgroud)

...在我有以下 docker-compose.yaml 文件的目录中,我得到了一个新的、随机命名的卷。

docker-compose.yaml:

version: '3.7'

services:

  pgadmin:
    restart: always
    image: dpage/pgadmin4
    container_name: pgadmin_container
    environment:
      PGADMIN_DEFAULT_EMAIL: ${PGADMIN_DEFAULT_EMAIL:-foobar}
      PGADMIN_DEFAULT_PASSWORD: ${PGADMIN_DEFAULT_PASSWORD:-password}
    ports:
      - "${PGADMIN_PORT:-8080}:80"
Run Code Online (Sandbox Code Playgroud)

命令行输出:

C:\postgres> docker-compose up -d
Creating network "postgres_default" with the default driver
Creating pgadmin_container ... done
C:\postgres> docker volume ls
DRIVER              VOLUME NAME
local               3ee8f970ff477052c6fba9001575a0efa0254deb8dcf73ca97d0422231c74931
C:\postgres> docker-compose down
Stopping pgadmin_container ... done
Removing pgadmin_container ... done
Removing network postgres_default
C:\postgres> docker-compose up -d
Creating network "postgres_default" with the default driver
Creating pgadmin_container ... done
C:\postgres> docker volume ls
DRIVER              VOLUME NAME
local               3ee8f970ff477052c6fba9001575a0efa0254deb8dcf73ca97d0422231c74931
local               705dad9c905eb8f1679a9ee4ff290363c40f5285b8048204cab44bce26916845
C:\postgres>
Run Code Online (Sandbox Code Playgroud)

您会看到,在第一个“up”之后有一个带有 64 个字符名称的卷,在第二次调用“docker-compose up”之后,有两个。这种模式还在继续。

是什么导致随机命名的卷?我如何防止它们创建强制系统重新使用它们?

我实际上已经编辑了我的 docker-compose.yaml 文件,以达到重现问题的最低限度。实际上,还有一个使用相同文件启动的 Postgres 数据库。

atl*_*ine 11

如果你docker inspect dpage/pgadmin4过去看看,你会看到下一个:

"Volumes": {
    "/var/lib/pgadmin": {}
}, 
Run Code Online (Sandbox Code Playgroud)

这意味着在它的 中Dockerfile,它定义了一个Anonymous volumes类似的下一个:

VOLUME ["/var/lib/pgadmin"]
Run Code Online (Sandbox Code Playgroud)

每次上/下服务时,上面都会更改卷名。为了使它不改变,你可以用 覆盖它Named volumes,如下所示:

version: '3.7'

services:
  pgadmin:
    restart: always
    image: dpage/pgadmin4
    container_name: pgadmin_container
    environment:
      PGADMIN_DEFAULT_EMAIL: ${PGADMIN_DEFAULT_EMAIL:-foobar}
      PGADMIN_DEFAULT_PASSWORD: ${PGADMIN_DEFAULT_PASSWORD:-password}
    ports:
      - "${PGADMIN_PORT:-8080}:80"
    volumes:
      - my-data:/var/lib/pgadmin

volumes:
    my-data:
Run Code Online (Sandbox Code Playgroud)

您可以参考this & this以了解更多信息。