说到码头工人,我完全是个新手。我正试着用一个虚拟项目来理解它。我有一个django项目,我的Dockerfile
位于Django项目的根文件夹中。我的docker-compose.yml
文件位于顶部根文件夹下,其中包含django项目文件夹和其他配置文件。
我的docker-compose.yml
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
FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /web
WORKDIR /web
ADD requirements.txt /web/
RUN pip install -r requirements.txt
ADD . /web/
我正在尝试运行以下命令
# 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
时,我会看到这个错误。
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
也会导致相同的错误。
发布于 2018-11-06 11:35:23
您正在尝试在non-privileged中挂载./data/db
,并且正在与一个/var/lib/postgresql/data
用户一起执行停靠-撰写。
因此,我们可以有两种可能性:
最简单的解决方案是与特权用户(root)一起执行docker撰写,但是如果您不想这样做,可以尝试如下:
如何授予/var/lib/postgresql/data权限?请阅读以下几行:
首先,注意/var/lib/postgresql/data是postgresql自动生成的,因此需要定义一个新的Dockerfile来修改这些权限。在此之后,您还需要修改docker-组合来使用这个新的Dockerfile。
./docker-compose.yml
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
FROM postgres
RUN mkdir -p /var/lib/postgresql/data
RUN chmod -R 777 /var/lib/postresql/data
ENTRYPOINT docker-entrypoint.sh
发布于 2019-06-14 00:59:05
我通过在卷定义的末尾添加":z“来解决问题。
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将内容标记为私有的未共享标签。只有当前容器才能使用私有卷。
发布于 2021-01-02 18:07:36
此解决方案适用于your user
不存在于docker
组中的情况。
docker
组中:grep 'docker' /etc/group
docker
组:sudo groupadd docker
sudo usermod -aG docker $USER
docker run hello-world
小贴士:记得启动码头服务。
如果有效,请再次尝试您的docker-compose
命令。
https://stackoverflow.com/questions/53170709
复制相似问题