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

时间:2019-07-24 03:30:03

标签: postgresql docker pgadmin pgadmin-4

每次我运行以下命令:

> 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数据库正在使用相同的文件启动。

2 个答案:

答案 0 :(得分:2)

如果您使用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:

您可以参考thisthis来了解更多信息。

答案 1 :(得分:1)

根据docs,图片在以下位置创建了一个体积:

/var/lib/pgadmin
  

这是pgAdmin存储会话数据的工作目录,   用户文件,配置文件及其配置数据库。   将此目录映射到主机上,可以轻松实现   在容器调用之间保持配置。

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/downhere讨论了类似的问题,