尝试玩postgres和docker:
docker run --name pg -v /Users/xxx/docker/data:/var/lib/postgresql/data -d postgres
立即停止。运行映像时不使用-v,容器将继续运行。如果我通过/bin/sh登录,我可以看到postgres默认数据库的挂载点:
root@f9e0e92dae26:/# df -k
Filesystem 1K-blocks Used Available Use% Mounted on
none 19049892 737424 17321744 5% /
tmpfs 1025332 0 1025332 0% /dev
shm 65536 8 65528 1% /dev/shm
none 116884912 52807056 64077856 46% /var/lib/postgres/data
/dev/sda1 19049892 737424 17321744 5% /var/lib/postgresql/data
但是我不能以-v选项所述的方式与主机共享它们,这是怎么了?
日志上写着:
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.
The database cluster will be initialized with locale "en_US.utf8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".
Data page checksums are disabled.
fixing permissions on existing directory /var/lib/postgresql/data ... ok
initdb: could not create directory "/var/lib/postgresql/data/pg_wal/archive_status": Permission denied
initdb: removing contents of data directory "/var/lib/postgresql/data"
除了/Users和/之外,我还尝试向VM传递了一个额外的共享目录,在我的例子中是/Users/xxx/docker/data,重新启动VM,但似乎不起作用。在VM中(docker-machine ssh)我现在可以看到/data挂载了。docker机器似乎挂载了完整路径的最后一部分。有什么解释吗?因此,可能官方的postgres映像可能会被更改(在dockerfile中?)来更改基本路径,请参考示例。
2条答案
按热度按时间bis0qfac1#
我在Windows下使用Vbox虚拟机时遇到了同样的问题。我尝试在虚拟机和Windows操作系统之间使用共享文件夹,这会导致权限问题。我通过从/home/{username}/..为卷传递目录解决了该问题
cvxl0en22#
在得到完全相同的错误后,对我起作用的是修剪卷。我从来没有弄清楚为什么没有足够的空间摆在首位。
在运行以下命令或进行任何修剪之前,请务必阅读此处的详细信息:https://docs.docker.com/config/pruning/#prune-everything
如果您可以忍受修剪卷,这应该可以消除OP的错误: