每次运行以下命令:
> 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 数据库。
如果你用
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:
根据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,讨论了类似的问题