Bit*_*een 0 docker docker-compose
我有一些 docker 容器,可以使用 docker-compose up / down 启动和停止。在 docker-compose.yml 中,我为每个容器定义了一个卷。据我了解,这些应该显示为 var/lib/docker/volumes 下的命名卷,但我所看到的只是一堆神秘的目录,每次重新启动容器时它们的数量也会增加。
每次我重新启动容器时,当我认为我正在使用卷来避免出现这样的情况时,数据库再次为空。我想保留数据。
我做错了什么吗?
version: "3"
services:
nftapi:
env_file:
- .env
build:
context: .
ports:
- '5000:5000'
depends_on:
- postgres
networks:
- postgres
postgres:
container_name: postgres
image: postgres:latest
ports:
- "5432:5432"
volumes:
- /data/postgres:/data/postgres
env_file:
- docker.env
networks:
- postgres
pgadmin:
links:
- postgres:postgres
container_name: pgadmin
image: dpage/pgadmin4
ports:
- "8080:80"
volumes:
- /data/pgadmin:/root/.pgadmin
env_file:
- docker.env
networks:
- postgres
networks:
postgres:
driver: bridge
Run Code Online (Sandbox Code Playgroud)
卷目录屏幕
Docker Hubpostgres镜像保存其数据/var/lib/postgresql/data(请参阅扩展描述中的“存储数据的位置”)。您需要更改绑定安装,以便这是此处指定的第二个目录。
volumes:\n - /data/postgres:/var/lib/postgresql/data\n # ^^^^^^^^^^^^^^^^^^^^^^^^\n # second half must be this exact path\nRun Code Online (Sandbox Code Playgroud)\n这就是为什么您看不到数据保留在主机目录中的原因;它安装在错误的路径上。
\n同时,图像Dockerfile 包含VOLUME该目录的声明。如果该目录没有安装任何其他内容,这会导致 Docker 为该目录创建一个匿名卷。这docker-compose down指出:
\n\n默认情况下 [by] 不会删除匿名卷
\ndocker-compose down。但是,由于它们没有\xe2\x80\x99t 稳定的名称,因此后续的up.
这就是为什么您也看不到重新启动后保留的数据库数据;修复安装路径将解决这个问题。
\n(在前面的问题中,您询问额外的卷来自哪里,它是由 Dockerfile 创建的匿名卷VOLUME。 @larsks 的答案对命名卷和绑定安装之间的差异进行了很好的讨论;匿名卷他们在答案末尾提到的卷是相同的VOLUME机制。)
| 归档时间: |
|
| 查看次数: |
2597 次 |
| 最近记录: |