six*_*mes 4 postgresql docker docker-compose
我正在尝试将postgres数据保存在docker容器中,这样一旦docker-compose down and 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
Run Code Online (Sandbox Code Playgroud)
救命?
根据Docker of Docker Compose,你写的东西如下:
volumes:
- /var/lib/postgresql/data
Run Code Online (Sandbox Code Playgroud)
它创建一个新的docker卷并将其映射到/var/lib/postgresql/data容器内部.因此,每次运行docker-compose up和docker-compose down,它创建新卷.您可以使用确认行为docker volume ls.
为避免这种情况,您有两种选择:
(A)将主机目录映射到容器中
您可以使用将主机目录映射到容器中<HOST_PATH>:<CONTAINER_PATH>.
volumes:
- /path/to/your/host/directory:/var/lib/postgresql/data
Run Code Online (Sandbox Code Playgroud)
postgresql的数据将保存到/path/to/your/host/directory容器主机中.
(B)使用外部容器
docker-compose有一个外部容器选项.当它设置为true时,它不会始终创建音量.这是一个例子.
version: '2'
services:
dbdata:
image: postgres:9.5.2
volumes:
- mypostgresdb:/var/lib/postgresql/data
volumes:
mypostgresdb:
external: true
Run Code Online (Sandbox Code Playgroud)
使用external: true,docker-compose不会创建mypostgredb卷,因此您必须使用以下命令自己创建它:
docker volume create --name=mypostgredb
Run Code Online (Sandbox Code Playgroud)
postgresql的数据将保存到名为docker的卷中mypostgredb.阅读参考了解更多细节.
| 归档时间: |
|
| 查看次数: |
1714 次 |
| 最近记录: |