首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Docker无法打开目录允许拒绝

Docker无法打开目录允许拒绝
EN

Stack Overflow用户
提问于 2018-11-06 11:11:36
回答 3查看 26.1K关注 0票数 16

说到码头工人,我完全是个新手。我正试着用一个虚拟项目来理解它。我有一个django项目,我的Dockerfile位于Django项目的根文件夹中。我的docker-compose.yml文件位于顶部根文件夹下,其中包含django项目文件夹和其他配置文件。

我的docker-compose.yml

代码语言:javascript
运行
复制
version: '3'
services:
  db:
    image: postgres
    container_name: dummy_project_postgres
    volumes:
      - ./data/db:/var/lib/postgresql/data

  event_planner:
    build: ./dummy_project
    container_name: dummy_project
    volumes:
      - .:/web
    ports:
      - "8000:8000"
    depends_on:
      - db
    links:
      - db:postgres

还有我的Dockerfile

代码语言:javascript
运行
复制
FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /web
WORKDIR /web
ADD requirements.txt /web/
RUN pip install -r requirements.txt
ADD . /web/

我正在尝试运行以下命令

代码语言:javascript
运行
复制
# stop and remove the existing containers
docker-compose stop
docker-compose rm -f

# up and run the container
docker-compose build
docker-compose up -d

docker-compose exec dummy_project bash

当我执行docker-compose up -d时,我会看到这个错误。

代码语言:javascript
运行
复制
docker-compose up -d                                                                         
dummy_project_postgres is up-to-date
Starting dummy_project ... done
warning: could not open directory 'data/db/': Permission denied

我知道以前问过这个问题,但我没有得到我需要的解决方案,现在我被困了好几个小时。

编辑:我对顶部文件夹下的所有文件夹都有所有权限

EDIT2: sudo docker-compose up -d也会导致相同的错误。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-11-06 11:35:23

您正在尝试在non-privileged中挂载./data/db,并且正在与一个/var/lib/postgresql/data用户一起执行停靠-撰写。

因此,我们可以有两种可能性:

  1. ./data/db权限出现问题。
  2. /var/lib/postgresql/data的问题

最简单的解决方案是与特权用户(root)一起执行docker撰写,但是如果您不想这样做,可以尝试如下:

  • 将权限授予./data/db (我看到您已经完成了编辑)。
  • 授予/var/lib/postgresql/data权限

如何授予/var/lib/postgresql/data权限?请阅读以下几行:

首先,注意/var/lib/postgresql/data是postgresql自动生成的,因此需要定义一个新的Dockerfile来修改这些权限。在此之后,您还需要修改docker-组合来使用这个新的Dockerfile。

./docker-compose.yml

代码语言:javascript
运行
复制
version: '3'
services:
  db:
    build: 
      context: ./mypostgres
      dockerfile: Dockerfile_mypostgres
    container_name: dummy_project_postgres
    volumes:
      - ./data/db:/var/lib/postgresql/data

  event_planner:
    build: ./dumy_project
    container_name: dummy_project
    volumes:
      - .:/web
    ports:
      - "8000:8000"
    depends_on:
      - db
    links:
      - db:postgres

./dumy_project/Dockerfile ->无更改

./mypostgres/Dockerfile_mypostgres

代码语言:javascript
运行
复制
FROM postgres
RUN mkdir -p /var/lib/postgresql/data
RUN chmod -R 777 /var/lib/postresql/data
ENTRYPOINT docker-entrypoint.sh
票数 8
EN

Stack Overflow用户

发布于 2019-06-14 00:59:05

我通过在卷定义的末尾添加":z“来解决问题。

代码语言:javascript
运行
复制
version: '3'
services:
  db:
    image: postgres
    container_name: dummy_project_postgres
    volumes:
      - ./data/db:/var/lib/postgresql/data:z

  event_planner:
    build: ./dummy_project
    container_name: dummy_project
    volumes:
      - .:/web
    ports:
      - "8000:8000"
    depends_on:
      - db
    links:
      - db:postgres

":z“是什么意思?

像SELinux这样的标签系统要求在装入容器的卷内容上放置适当的标签。如果没有标签,安全系统可能会阻止在容器中运行的进程使用内容。默认情况下,Docker不更改操作系统设置的标签。 若要更改容器上下文中的标签,可以将两个后缀:z或:Z添加到卷挂载中。这些后缀告诉Docker在共享卷上重新命名文件对象。Z选项告诉Docker两个容器共享卷内容。因此,Docker将内容标记为共享内容标签。共享卷标签允许所有容器读取/写入内容。Z选项告诉Docker将内容标记为私有的未共享标签。只有当前容器才能使用私有卷。

https://docs.docker.com/engine/reference/commandline/run/#mount-volumes-from-container---volumes-from

what is 'z' flag in docker container's volumes-from option?

票数 16
EN

Stack Overflow用户

发布于 2021-01-02 18:07:36

此解决方案适用于your user不存在于docker组中的情况。

  1. 首先检查用户是否在docker组中:
代码语言:javascript
运行
复制
grep 'docker' /etc/group
  1. 将用户添加到停靠组:
  • 如果命令返回为空,则创建docker组:
代码语言:javascript
运行
复制
sudo groupadd docker
  • 否则,如果您的用户不在场,请返回,然后将他添加到组中:
代码语言:javascript
运行
复制
sudo usermod -aG docker $USER
  1. 重新启动系统
  2. 再测试一次:
代码语言:javascript
运行
复制
docker run hello-world

小贴士:记得启动码头服务。

如果有效,请再次尝试您的docker-compose命令。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53170709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档