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

问题描述 投票:0回答:2

每次运行以下命令:

> docker-compose up -d

...在包含以下 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"

命令行输出:

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>

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

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

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

postgresql docker pgadmin pgadmin-4
2个回答
28
投票

如果你用

docker inspect dpage/pgadmin4
看一下,你会看到下一个:

"Volumes": {
    "/var/lib/pgadmin": {}
}, 

这意味着在其

Dockerfile
中,它定义了一个
Anonymous volumes
,如下所示:

VOLUME ["/var/lib/pgadmin"]

每次上/下服务时,上述都会使卷名发生变化。为了使其不改变,您可以使用

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:

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


5
投票

根据docs,图像在以下位置创建一个卷:

/var/lib/pgadmin

这是 pgAdmin 存储会话数据的工作目录, 用户文件、配置文件及其配置数据库。 将此目录映射到主机上可以让您轻松地 维护容器调用之间的配置。

A

docker inspect container_id
显示:

"Mounts": [
    {
        "Type": "volume",
        "Name": "70c8ae8e1de3e5d6c71fa9c63930cc75761132f4fdb75a2982b32454313b78c6",
        "Source": "/var/lib/docker/volumes/70c8ae8e1de3e5d6c71fa9c63930cc75761132f4fdb75a2982b32454313b78c6/_data",
        "Destination": "/var/lib/pgadmin",
        "Driver": "local",
        "Mode": "",
        "RW": true,
        "Propagation": ""
    }
],

所以看来每次都会创建一个匿名卷 为了重复使用该卷,请使用

docker-compose start/stop
而不是
docker-compose up/down
here

讨论了类似的问题
© www.soinside.com 2019 - 2024. All rights reserved.