![](/img/trans.png)
[英]Unable to connect postgres to fastapi in docker-compose
[英]Postgres running in docker-compose unable to write data to mounted volume
描述
我在 docker-compose 中运行 Postgres 容器。 我正在使用下面docker-compose.yml
中的卷将 Postgres 所需的/data
目录安装到容器中。
资格
graph-node
并创建一个名为graph-node
的数据库boot.sh
脚本删除了每个docker-compose up
之前的data/postgres/
文件夹。 只要知道/data/postgres
在每次运行docker-compose up
时都会重新创建。 预期行为Postgres 启动并将它需要的所有文件写入已挂载的/data/postgres
卷。
实际行为Postgres 可以正常启动,但不会向卷中写入任何内容。
可能的原因
这感觉像是读/写权限问题? 我按照建议在卷的第三栏中添加了:rw
,仍然没有雪茄。 我在数据目录上运行chmod -R a+rwx./data
以递归方式访问所有文件。
最奇怪的是,如果我在启动后手动运行chmod -R a+rwx./data
,Postgres 突然能够将所有需要的文件写入目录。 但是,如果我在创建它之前运行它,如下所示(递归地用于/data
中的所有事物)它不起作用。
文件
引导程序
# Check for data/ dir. If found, make it recursively rwx for all users. Otherwise, create it and make it recursively rwx for all users.
if [ -d "./data" ]
then
chmod -R a+rwx ./data
else
mkdir data
chmod -R a+rwx ./data
fi
if [ -d "./data/postgres" ]
then
rm -rf data/postgres
else
echo "No data/postgres dir found. Proceeding"
fi
docker-compose -f docker-compose.yml up
docker-compose.yml
version: "3"
services:
postgres:
image: postgres
ports:
- '5432:5432'
command:
[
"postgres",
"-cshared_preload_libraries=pg_stat_statements"
]
environment:
POSTGRES_USER: graph-node
POSTGRES_PASSWORD: let-me-in
POSTGRES_DB: graph-node
volumes:
- ./data/postgres:/var/lib/postgresql/data:rw
机器 + 软件规格
操作系统: Windows 10、WSL2、Ubuntu
Docker 版本: 20.10.7(直接在机器上运行,因为它是 Ubuntu,不像 Mac 上的 Docker 桌面)
您是否以提升用户身份运行此脚本? 特别是须藤?
好吧,不完全是一个答案,但是因为我只需要 Postgres 的一次运行临时存储(无论如何我都在删除运行之间的数据/目录),所以我通过删除外部卷并让 Postgres 将数据写入容器本身来解决了这个问题,它肯定有特权。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.