【问题标题】:PGAdmin creates new random volume with each "docker-compose up"PGAdmin 使用每个“docker-compose up”创建新的随机卷
【发布时间】:2019-07-24 03:30:03
【问题描述】:

每次我运行以下命令:

> 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


    【解决方案1】:

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

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

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

    VOLUME ["/var/lib/pgadmin"]
    

    每次启动/关闭服务时,上述内容都会更改卷名。为了让它不改变,你可以用 Named volumes 覆盖它,比如 next:

    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了解更多信息。

    【讨论】:

    • 与我在问题中给出的示例 YAML 文件不同,我确实有一个“卷”部分。我的问题是我没有指定容器的“/var/lib/pgadmin”目录,而是使用了不同的东西。实际上,它与没有它是一样的。感谢您的回答,它已经解决了我的问题。
    【解决方案2】:

    根据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/down。类似问题讨论here,

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-08
    • 2021-12-29
    • 2020-07-05
    • 1970-01-01
    • 2018-12-18
    相关资源
    最近更新 更多