我是docker的新手,正在使用docker-compose开发项目。从文档中我了解到应该使用数据容器来保持数据的持久性,但是使用docker-compose时我无法做到这一点。
每当我执行docker-compose down
时,它会删除数据库中的数据,但通过执行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
数据容器的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.
现在我正在做的是创建一个独立的数据容器,并将其放置在 db
的 volumes_from
值中。它运行良好,即使执行 docker-compose down
后也不会删除任何数据。
我的问题:
使用
docker-compose
创建能够存储数据库数据并正确使用它们的最佳方法是什么?我对所采用的方法并不满意,即通过创建一个独立的数据容器。您有什么想法吗?
volumes: - /data/mydata:/var/lib/postgresql/data/pgdata
,这是优先于数据容器卷的首选方法。 - ldgERROR: Named volume "dataVolume:/data:rw" is used in service "data_container" but no declaration was found in the volumes section.
我也对使用这种方法进行数据可移植性很感兴趣。 - Salman Ghauri