通过 boot2docker 将卷挂载到 postgres 容器

Posted

技术标签:

【中文标题】通过 boot2docker 将卷挂载到 postgres 容器【英文标题】:Mount volume through boot2docker to the postgres container 【发布时间】:2015-08-03 10:02:55 【问题描述】:

我正在尝试在 OSX 上使用boot2docker 运行postgres 图像的容器。

这个命令在我的 Ubuntu 上运行良好:

docker run -v $(pwd)/data:/var/lib/postgresql/data postgres

但 OSX 说:

fixing permissions on existing directory /var/lib/postgresql/data ... ok
creating subdirectories ... initdb: could not create directory "/var/lib/postgresql/data/global": Permission denied
initdb: removing contents of data directory "/var/lib/postgresql/data"

chmod 没有帮助。

我试过选项--user $(id -u):$(id -g)。它破坏了 Ubuntu 上的容器,并改变了 OSX 上的错误。

Ubuntu:chmod: changing ownership of ‘/var/lib/postgresql/data’: Operation not permitted

OSX:chmod: changing permissions of ‘/run/postgresql’: Operation not permitted

因为它适用于 Ubuntu,所以我想在 OSX 上运行它,而无需创建自己的图像。 但我不知道如何处理这个错误。

有什么想法吗?

【问题讨论】:

【参考方案1】:

我认为这是known boot2docker issue 有several 解决方法,但没有解决方案

#1) Overriding the /Users default share on boot2docker start:
boot2docker --vbox-share=$(pwd)/share-location=share-name up
#2) boot2docker ssh in and mount the custom share:
sudo mount -t vboxsf -o uid=999,gid=50 share-name [SHARE-FULL-PATH]/share-location

【讨论】:

【参考方案2】:

将本地文件夹装载到 docker 容器中并不是一个好习惯。它经常导致problems with file permissions。

更好的解决方案是使用volume container 更改您的设置。 volume container backups 也有很好的概念。

【讨论】:

我尝试使用卷容器来实现。同样的问题。

以上是关于通过 boot2docker 将卷挂载到 postgres 容器的主要内容,如果未能解决你的问题,请参考以下文章

docker容器文件夹中的命名管道通过boot2docker挂载到mac os x文件系统

在没有 noexec 选项的情况下将卷挂载到 docker 容器中

TypeError: Object(...) is not a function 当将卷从本地目录挂载到 next.js 容器中时

docker中容器有必要挂载到主机上吗存储

将 docker 卷安装到 docker 容器

win10通过Docker Toolbox安装docker及配置文件共享挂载本地磁盘目录