我想我不明白 Docker 卷是如何工作的。我有一个 docker compose 文件,其中包含一个运行 laravel 应用程序的应用程序服务、一个 postgres 服务和一个 memcached 服务。我为 laravel 存储和 postgres 命名了卷,但这些卷没有任何内容持久化。如果我查看文件查找器,文件夹中没有文件,当我关闭数据库容器时,数据就会丢失。
docker-compose.yaml:
services:
app:
build:
context: .
entrypoint: php artisan octane:frankenphp
ports:
- "80:8000"
- "443:443"
- "443:443/udp" # HTTP/3
- "5173:5173"
depends_on:
- db
- cache
volumes:
- storage:/path/to/laravel/base/storage
- ../:/app
networks:
- storefront
- backroom
db:
image: postgres:latest
restart: unless-stopped
volumes:
- data:/path/where/I/want/db/data
environment:
POSTGRES_USER: user
POSTGRES_DB: db
POSTGRES_PASSWORD: "password"
networks:
- backroom
cache:
image: memcached:latest
restart: unless-stopped
networks:
- backroom
networks:
storefront:
backroom:
volumes:
data:
storage:
这条线似乎有效:
容器进行通信 - php artisan migrate 和 php artisan db:seed 在 postgres 中创建表和记录 - 但数据不会持久。
谢谢你
在 Docker 中,该标题下指定了两种不同类型的“卷”。一个实际上是 docker 卷,另一个是“绑定挂载”。
这是一个 docker 卷:
- storage:/path/to/laravel/base/storage
它们不是常规文件系统的一部分,而是由 docker 管理。当第一部分只是一个没有 / 的名称时,它将是一个卷。
这是绑定安装:
- ../:/app
它们基本上是 Docker 容器和文件系统之间的映射。它们指定一个路径,而不仅仅是一个卷名称。
结论
您所看到的是正确的。并且卷中的数据will实际上会持续存在,只是不在您可以在普通文件系统上查看和管理的目录中。
您对各种事物使用哪种类型最终取决于您,但我建议您阅读各卷、其目的、如何使用它们以及任何优点/缺点,以便您做出明智的选择。