我的docker compose文件有三个容器,web,nginx和postgres.Postgres看起来像这样:
postgres:
container_name: postgres
restart: always
image: postgres:latest
volumes:
- ./database:/var/lib/postgresql
ports:
- "5432:5432
Run Code Online (Sandbox Code Playgroud)
我的目标是安装一个./database与postgres容器内调用的本地文件夹相对应的卷/var/lib/postgres.当我启动这些容器并将数据插入postgres时,我验证/var/lib/postgres/data/base/了我正在添加的数据(在postgres容器中),但是在我的本地系统中,./database只获取了一个data文件夹,即./database/data创建了它,但它是空的.为什么?
笔记:
根据尼克的建议,我做了一个docker inspect并发现:
"Mounts": [
{
"Source": "/Users/alex/Documents/MyApp/database",
"Destination": "/var/lib/postgresql",
"Mode": "rw",
"RW": true,
"Propagation": "rprivate"
},
{
"Name": "e5bf22471215db058127109053e72e0a423d97b05a2afb4824b411322efd2c35",
"Source": "/var/lib/docker/volumes/e5bf22471215db058127109053e72e0a423d97b05a2afb4824b411322efd2c35/_data",
"Destination": "/var/lib/postgresql/data",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],
Run Code Online (Sandbox Code Playgroud)
这似乎是数据被另一个我自己编码的卷偷走了.不知道为什么会这样.postgres图像是否为我创建了该卷?如果是这样,当我重新启动时,是否有某种方法可以使用该卷而不是我正在安装的卷?否则,是否有一种很好的方法可以禁用其他卷并使用我自己的卷./database?
我找到了解决方案,感谢尼克!(和另一位朋友)以下答案.
我在我的项目中使用带有django的postgresql.我把它们放在不同的容器中,问题是我需要在运行django之前等待postgres.这时我正在使用sleep 5django容器的command.sh文件.我还发现netcat可以做到这一点,但我更喜欢没有额外包的方式.curl和wget不能这样做,因为他们不支持postgres协议.有办法吗?
这里有很多关于我经历过的类似问题的问题,比如这个、这个、这个和这个非常相似,但那里的解决方案都没有解决我的问题。请不要关闭这个问题。
我在 docker 上使用 nginx 和 postgres 运行 django。机密信息存储在 .env 文件中。我的 postgres 数据没有持久化docker-compose up/start和docker-compose down/stop/restart。
这是我的docker-compose文件:
version: '3.7'
services:
web:
build: ./app
command: gunicorn umngane_project.wsgi:application --bind 0.0.0.0:8000
volumes:
- ./app/:/usr/src/app/
expose:
- 8000
environment:
- SECRET_KEY=${SECRET}
- SQL_ENGINE=django.db.backends.postgresql
- SQL_DATABASE=postgres
- SQL_USER=${POSTGRESQLUSER}
- SQL_PASSWORD=${POSTGRESQLPASSWORD}
- SQL_HOST=db
- SQL_PORT=5432
- SU_NAME=${SU_NAME}
- SU_EMAIL=${SU_EMAIL}
- SU_PASSWORD=${SU_PASSWORD}
depends_on:
- db
db:
image: postgres:11.2-alpine
volumes:
- postgres_data:/var/lib/postgresql/data/
nginx:
build: …Run Code Online (Sandbox Code Playgroud)