我正在尝试将postgres数据保存在docker容器中,以便在docker-compose down和docker-compose up -d时,您不会丢失前一个会话中的数据.我无法做任何事情 – 拉下容器并再次备份会定期删除数据.
这是我目前的docker-compose.yml:
version: '2' services: api: build: . ports: - '8245:8245' volumes: - .:/home/app/api - /home/app/api/node_modules - /home/app/api/public/src/bower_components links: - db db: build: ./database env_file: .env ports: - '8246:5432' volumes_from: - dbdata dbdata: image: "postgres:9.5.2" volumes: - /var/lib/postgresql/data
救命?
解决方法
根据
Dockment of Docker Compose,你写的东西如下:
volumes: - /var/lib/postgresql/data
它创建一个新的docker卷并将其映射到容器内的/ var / lib / postgresql / data.
因此,每次运行docker-compose up和docker-compose时,都会创建新卷.您可以使用docker volume ls确认行为.
为避免这种情况,您有两种选择:
(A)将主机目录映射到容器中
您可以使用< HOST_PATH>:< CONTAINER_PATH>将主机目录映射到容器中.
volumes: - /path/to/your/host/directory:/var/lib/postgresql/data
postgresql的数据将保存到容器主机的/ path / to / your / host /目录中.
(B)使用外部容器
docker-compose有external container的选项.
当它设置为true时,它不会始终创建音量.
这是一个例子.
version: '2' services: dbdata: image: postgres:9.5.2 volumes: - mypostgresdb:/var/lib/postgresql/data volumes: mypostgresdb: external: true
使用external:true,docker-compose不会创建mypostgredb卷,因此您必须使用以下命令自己创建它:
docker volume create --name=mypostgredb
postgresql的数据将保存到名为mypostgredb的docker卷中.有关详细信息,请阅读reference.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。