我是 docker 新手,正在使用 docker compose 开发项目。从文档中我了解到我应该使用仅数据容器来保持数据的持久性,但我无法使用 docker-compose 这样做。
每当我执行 docker-compose down
时,它都会从 db 中删除数据,但通过执行 docker-compose stop
不会删除数据。可能是因为我没有创建命名数据卷,并且 docker-compose down
几乎不会删除所有容器。所以我尝试命名容器,但它给我带来了错误。
请查看我的 yml
文件:
version: '2'
services:
data_container:
build: ./data
#volumes:
# - dataVolume:/data
db:
build: ./db
ports:
- "5445:5432"
environment:
- POSTGRES_USER=postgres
- POSTGRES_DB=postgres
# - PGDATA=/var/lib/postgresql/data/pgdata
volumes_from:
# - container:db_bus
- data_container
geoserver:
build: ./geoserver
depends_on:
- db
ports:
- "8004:8080"
volumes:
- ./geoserver/data:/opt/geoserverdata_dir
web:
build: ./web
volumes:
- ./web:/code
ports:
- "8000:8000"
depends_on:
- db
command: python manage.py runserver 0.0.0.0:8000
nginx:
build: ./nginx
ports:
- "83:80"
depends_on:
- web
data_container 的 Docker 文件是:
FROM stackbrew/busybox:latest
MAINTAINER Tom Offermann <tom@offermann.us>
# Create data directory
RUN mkdir /data
# Create /data volume
VOLUME /data
我试过了,但是通过 docker-compose down,数据丢失了。我尝试将 data_container 命名为您可以看到注释行,它给我带来了这个错误:
ERROR: Named volume "dataVolume:/data:rw" is used in service "data_container" but no declaration was found in the volumes section.
所以现在我正在做的是我创建了一个独立的数据只命名容器并将其放入数据库的 volumes_from
值中。它运行良好,即使在执行 docker-compose down
之后也没有删除任何数据。
我的查询:
使用
docker-compose
制作可以存储数据库数据的容器并正确使用它们的最佳方法是什么?我的意识不同意我选择的方法,即创建一个独立的数据容器。有什么想法吗?
最佳答案
docker-compose down
执行以下操作
Stops containers and removes containers, networks, volumes, and images created by up
所以您遇到的行为是预期的。
使用 docker-compose stop
关闭使用 docker-compose 文件创建的容器,但不删除它们的卷。
其次,您不需要 docker compose 版本 2 中的 data-container
模式。所以删除它并使用
db:
...
volumes:
- /var/lib/postgresql/data
关于Docker Compose - 如何存储数据库数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38793821/