我正在使用Docker Compose运行多个容器,包括一个带有Postgres映像的容器。我正在尝试向该容器添加一个卷,以跨容器构建持久化我的数据。但是,当它尝试在容器中为该卷创建目录时,我收到了一个错误。
我运行:
docker-compose build
然后
docker compose up
我收到以下错误:
错误:对于cxbenchmark\u db\u 1,无法启动服务db:oci运行时错误:container\u linux。go:265:启动容器进程导致“process\u linux。go:368:容器初始化导致”rootfs\u linux。go:57:mounting\\“/var/lib/docker/volumes/69845a017b4465e9122852a75ca194db473df95fa218658b60fb56eba9be9e/_data\\”to rootfs\\“/var/lib/docker/overlay2/627956d63fb0480448079577a83b54b53f8366fdf31136b7c66951c3f672355/merged\\”at\\“/var/lib/docker/overlay2/627956d63fb0480448079577a83b53b53f83b538b83383855 66FDF31136B7C669541C3F672355/merged/var/lib/postgresql/data\\”导致\\“mkdir/var/lib/docker/overlay2/627956d63fb0480448079577a83b0b54f83866fdf31136b7c669541c3f672355/merged/var/lib/postgresql/data:权限被拒绝\”“\”“
我的完整docker-compose.yml
如下所示(请注意定义卷的名为db
的服务):
version: '3'
services:
nginx:
image: nginx:latest
ports:
- 80:8000
volumes:
- ./src:/src
- ./config/nginx:/etc/nginx/conf.d
- ./src/static:/static
depends_on:
- web
web:
build: .
command: bash -c "python manage.py makemigrations && python manage.py migrate && gunicorn cx_benchmark.wsgi -b 0.0.0.0:8000"
depends_on:
- db
volumes:
- ./src:/src
- ./src/static:/static
expose:
- 8000
db:
image: postgres:latest
volumes:
- /private/var/lib/postgresql:/var/lib/postgresql
ports:
- 5432:5432
有什么想法如何解决?
您看到的错误不是(必然)在您的compose文件中显式的卷绑定装载的问题,而是在主postgres中的声明
VOLUME/var/lib/postgresql/data
由于您尚未为此目录(而是父目录)提供装载点,docker引擎正在创建一个本地卷,然后尝试将该卷装载到您已绑定装载的位置,并出现权限错误。
为了清晰起见,以下是docker引擎为您创建的音量:
/var/lib/docker/volumes/69845a017b4465e9122852a75ca194db473df95fa218658b8a60fb56eba9be9e/_data
这是它试图绑定该目录的目录位置;在您从private/var/lib/postgresql的绑定挂载之上:
mkdir /var/lib/docker/overlay2/627956d63fb0480448079577a83b0b54f83866fdf31136b7c669541c3f672355/merged/var/lib/postgresql/data: permission denied
现在,我认为这失败的原因是,您可能已经在Docker引擎中打开了用户名称空间(“
userns-remap”标志/设置),这样容器就没有权限在您的主机上根所有的位置创建目录。除此之外,唯一的另一个选项是,
postgres
容器以非root用户的身份启动,但我在您的撰写文件或官方的Dockerfile
中没有看到使用user
指令的最新版本的任何内容。
顺便说一句,由于您的绑定挂载与postgres
Dockerfile
中的VOLUME
说明符不匹配,因此您最终会使用双卷,因此您可以更改您的compose文件以挂载到/var/lib/postgresql/data
并绕过正在创建的额外卷。尤其是如果您希望您的DB数据最终位于/Private/var/lib/postgresql
中,因为发现它不在那里可能会令人惊讶,而是在/var/lib/docker/体积/...
位置。
我添加了使用权限,包括WRITE_EXTERNAL_STORAGE,android.permission.相机,READ_EXTERNAL_STORAGEAndroidManifest.xml. 当我在Nexus6(API 24)中运行我的应用程序时,它向我抛出了以下错误: java.io.IOException:权限被拒绝 这是我的代码: 如何在权限相机运行时打开之前使用它?
我已经搜索了几个小时了,但找不到解决方案,即使有类似的问题。 我试图在一个全新的laravel安装上运行php artisan tinker,用户是网站管理员(项目目录demo的所有者),但我遇到了以下错误: 使用详细标志运行: 异常跟踪:照亮\Foundation\Bootstrap\HandleExceptions- 希望有人能给我一个提示。谢谢 分布:Raspbian GNU/Linux8(
问题内容: 在将非root用户添加到sudoers组的映像构建过程中,无法创建文件夹。这是我的Dockerfile: 我得到错误: 问题答案: Docker容器内的文件系统就像Docker容器外的文件系统一样工作:如果要创建文件或目录,则需要适当的权限。在这种情况下,您尝试以非root用户身份创建(因为该指令更改了用于运行其后所有命令的UID)。那是行不通的,因为它拥有并具有mode 。 请尝试:
问题内容: 大喊之前,请重复!把我放进深渊,听我说。:) 我一直在为与我合作的公司开发一个Intranet站点,最初我是直接从运行 Windows 7 / IIS的 工作站开发它的。当我接近站点/应用程序的完成时,我得到了一个运行 Apache 的 Centos 7 盒子,因此我开始了将其迁移到该系统的过程。我已经解决了大部分次要问题,并且现在使网站开始运行。但是,网站的一部分与我们的数据库进行交
我试图运行一个本地Jenkins管道使用Jenkinsfile的nodejs应用程序使用节点:6-alpin图像(默认)使用build.sh脚本使用调用npm安装然后我得到了以下权限错误 npm ERR!错误:EACCES:权限被拒绝,mkdir'/. npm'npm ERR!在错误(本机)npm ERR!{错误:EACCES:权限被拒绝,mkdir'/. npm'npm ERR!在错误(本机)n
似乎“.dotnet”文件夹在Docker容器中受到保护。是否有一种方法可以获得对此的读/写权限,或者改变它的位置?当我猛击容器时,我似乎找不到文件夹。 谢谢你的帮助。