【发布时间】:2021-01-29 02:07:52
【问题描述】:
有一些类似的帖子,但这与在 Docker 桌面上运行带有 WSL2 后端的 Postgres 相关。 WSL2 在 Windows 上带来了完整的 Linux 体验。卷可以安装到 Windows 和 Linux 文件系统。但出于性能原因,最佳做法是使用 Linux 文件系统,请参阅docker documentation。
从 Linux 文件系统绑定挂载文件而不是从 Windows 主机远程挂载文件时,性能要高得多。因此避免使用 docker run -v /mnt/c/users:/users (其中 /mnt/c 是从 Windows 挂载的)。 相反,在 Linux shell 中使用类似 docker run -v ~/my-project:/sources 的命令,其中 ~ 被 Linux shell 扩展为 $HOME。
我的 WSL 发行版是 Ubuntu 20.04 LTS。我将挂载 Postgres 数据目录绑定到 Linux 文件系统上的目录,并且我还将 Postgres PGDATA 配置为使用子目录,因为官方 Docker 映像文档中对此进行了说明:
PGDATA 此可选变量可用于为数据库文件定义另一个位置(例如子目录)。默认为 /var/lib/postgresql/data。如果您使用的数据卷是文件系统挂载点(如 GCE 永久磁盘)或不能被 postgres 用户 chown 的远程文件夹(如某些 NFS 挂载),Postgres initdb 建议创建一个子目录来包含数据。
这就是我启动 Postgres 并将卷安装到 WSL2 Ubuntu 文件系统的方式:
docker run -d \
--name some-postgres -e POSTGRES_PASSWORD=root \
-e PGDATA=/var/lib/postgresql/data/pgdata \
-v ~/custom/mount:/var/lib/postgresql/data \
postgres
我可以执行到正在运行的容器中并验证数据文件夹是否存在并且配置正确:
现在,如果我尝试从主机 (WSL2 Linux) 访问该文件夹,我将获得权限被拒绝:
如果有人能提供解决方案,我将不胜感激。现有帖子均无法解决此问题。
【问题讨论】:
标签: postgresql docker docker-volume ubuntu-20.04 wsl-2