为什么我的 PostgreSQL 数据在 Docker 中使用卷不持久?
Why isn't my PostgreSQL data persistent in Docker using volumes?
我目前正在学习如何使用 Flask、PostgreSQL 和 Docker,因为我正在尝试做一个网络应用程序。
我为开发阶段创建了两个容器:一个用于数据库,另一个用于网络。我遇到的问题是,每当我停止并重新启动我的容器时,数据就不再存在了。
为了创建容器,我遵循了以下 link:https://testdriven.io/blog/dockerizing-flask-with-postgres-gunicorn-and-nginx/#project-setup
我看到我可以创建一个卷来将数据持久保存在容器中,但它似乎不起作用,我也不太明白为什么。这是我的 docker-compose 文件:
version: '3.7'
services:
web:
build: ./services/web
restart: always
command: python manage.py run -h 0.0.0.0
volumes:
- ./services/web/:/usr/src/app/
- ./migrations:/usr/src/app/migrations
ports:
- 5000:5000
env_file:
- ./dev.env
depends_on:
- db
db:
container_name: postgres
restart: always
image: postgres:latest
volumes:
- pgdata:/var/lib/postgresql/data
- .:/usr/src/app #For refreshing the container if the code changes
ports:
- 5432:5432
environment:
- POSTGRES_USER=hello_flask
- POSTGRES_PASSWORD=hello_flask
- POSTGRES_DB= hello_flask_dev #To change
volumes:
pgdata:
我很小心地使用 docker-compose up -d
所以我没有删除任何卷并且创建了以下卷 docker volume inspect
:
[
{
"CreatedAt": "2021-04-19T13:19:05Z",
"Driver": "local",
"Labels": {
"com.docker.compose.project": "hera_docker",
"com.docker.compose.version": "1.29.0",
"com.docker.compose.volume": "pgdata"
},
"Mountpoint": "/var/lib/docker/volumes/hera_docker_pgdata/_data",
"Name": "hera_docker_pgdata",
"Options": null,
"Scope": "local"
}
]
我想维护 docker-compose 命令,因为这两个容器在一个多容器中。
任何帮助都会有很大的帮助。我已经检查了这个论坛中的其他一些问题,但我真的不知道我的问题是怎么回事。
提前致谢。
好吧,在尝试和尝试几乎放弃之后,我找到了解决方案。如果它对某人有帮助,我会把它留在这里。
似乎“web”应用程序正在覆盖数据库,解决方案是更改 docker-将 web 中的 depends_on: db
组合为 db 中的 depends_on: web
。现在,它看起来像这样:
version: '3.7'
services:
web:
build: ./services/web
restart: always
command: python manage.py run -h 0.0.0.0
volumes:
- ./services/web/:/usr/src/app/
ports:
- 5000:5000
env_file:
- ./dev.env
db:
container_name: postgres
restart: always
image: postgres:latest
volumes:
- "pgdata:/var/lib/postgresql/data"
- .:/usr/src/app
ports:
- 5432:5432
environment:
- POSTGRES_USER=hello_flask
- POSTGRES_PASSWORD=hello_flask
- POSTGRES_DB=hello_flask_dev
depends_on:
- web
volumes:
pgdata:
从 pgdata:/var/lib/postgresql/data
到 "pgdata:/var/lib/postgresql/data"
的更改只是为了不在我的 flask 目录中创建新文件夹。
我目前正在学习如何使用 Flask、PostgreSQL 和 Docker,因为我正在尝试做一个网络应用程序。
我为开发阶段创建了两个容器:一个用于数据库,另一个用于网络。我遇到的问题是,每当我停止并重新启动我的容器时,数据就不再存在了。
为了创建容器,我遵循了以下 link:https://testdriven.io/blog/dockerizing-flask-with-postgres-gunicorn-and-nginx/#project-setup
我看到我可以创建一个卷来将数据持久保存在容器中,但它似乎不起作用,我也不太明白为什么。这是我的 docker-compose 文件:
version: '3.7'
services:
web:
build: ./services/web
restart: always
command: python manage.py run -h 0.0.0.0
volumes:
- ./services/web/:/usr/src/app/
- ./migrations:/usr/src/app/migrations
ports:
- 5000:5000
env_file:
- ./dev.env
depends_on:
- db
db:
container_name: postgres
restart: always
image: postgres:latest
volumes:
- pgdata:/var/lib/postgresql/data
- .:/usr/src/app #For refreshing the container if the code changes
ports:
- 5432:5432
environment:
- POSTGRES_USER=hello_flask
- POSTGRES_PASSWORD=hello_flask
- POSTGRES_DB= hello_flask_dev #To change
volumes:
pgdata:
我很小心地使用 docker-compose up -d
所以我没有删除任何卷并且创建了以下卷 docker volume inspect
:
[
{
"CreatedAt": "2021-04-19T13:19:05Z",
"Driver": "local",
"Labels": {
"com.docker.compose.project": "hera_docker",
"com.docker.compose.version": "1.29.0",
"com.docker.compose.volume": "pgdata"
},
"Mountpoint": "/var/lib/docker/volumes/hera_docker_pgdata/_data",
"Name": "hera_docker_pgdata",
"Options": null,
"Scope": "local"
}
]
我想维护 docker-compose 命令,因为这两个容器在一个多容器中。
任何帮助都会有很大的帮助。我已经检查了这个论坛中的其他一些问题,但我真的不知道我的问题是怎么回事。
提前致谢。
好吧,在尝试和尝试几乎放弃之后,我找到了解决方案。如果它对某人有帮助,我会把它留在这里。
似乎“web”应用程序正在覆盖数据库,解决方案是更改 docker-将 web 中的 depends_on: db
组合为 db 中的 depends_on: web
。现在,它看起来像这样:
version: '3.7'
services:
web:
build: ./services/web
restart: always
command: python manage.py run -h 0.0.0.0
volumes:
- ./services/web/:/usr/src/app/
ports:
- 5000:5000
env_file:
- ./dev.env
db:
container_name: postgres
restart: always
image: postgres:latest
volumes:
- "pgdata:/var/lib/postgresql/data"
- .:/usr/src/app
ports:
- 5432:5432
environment:
- POSTGRES_USER=hello_flask
- POSTGRES_PASSWORD=hello_flask
- POSTGRES_DB=hello_flask_dev
depends_on:
- web
volumes:
pgdata:
从 pgdata:/var/lib/postgresql/data
到 "pgdata:/var/lib/postgresql/data"
的更改只是为了不在我的 flask 目录中创建新文件夹。