无法通过-v共享Docker容器数据

shstlldc  于 2023-01-08  发布在  Docker
关注(0)|答案(2)|浏览(142)

尝试玩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中?)来更改基本路径,请参考示例。

bis0qfac

bis0qfac1#

我在Windows下使用Vbox虚拟机时遇到了同样的问题。我尝试在虚拟机和Windows操作系统之间使用共享文件夹,这会导致权限问题。我通过从/home/{username}/..为卷传递目录解决了该问题

cvxl0en2

cvxl0en22#

在得到完全相同的错误后,对我起作用的是修剪卷。我从来没有弄清楚为什么没有足够的空间摆在首位。
在运行以下命令或进行任何修剪之前,请务必阅读此处的详细信息:https://docs.docker.com/config/pruning/#prune-everything
如果您可以忍受修剪卷,这应该可以消除OP的错误:

docker system prune --volumes

相关问题