首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker容器卷权限错误

Docker容器卷权限错误
EN

Stack Overflow用户
提问于 2016-03-21 06:58:49
回答 2查看 12K关注 0票数 6

我在OSX 10.11中通过本地docker-machine VM运行Docker 1.8.1。

我有以下docker-compose.yml:

代码语言:javascript
复制
web:
    build: docker/web
    ports:
        - 80:80
        - 8080:8080
    volumes:
        - $PWD/cms:/srv/cms

我的Dockerfile看起来像这样:

代码语言:javascript
复制
FROM alpine

# install nginx and php
RUN apk add --update \
    nginx \
    php \
    php-fpm \
    php-pdo \
    php-json \
    php-openssl \
    php-mysql \
    php-pdo_mysql \
    php-mcrypt \
    php-ctype \
    php-zlib \
    supervisor \
    wget \
    curl \
    && rm -rf /var/cache/apk/*

RUN mkdir -p /etc/nginx && \
    mkdir -p /etc/nginx/sites-enabled && \
    mkdir -p /var/run/php-fpm && \
    mkdir -p /var/log/supervisor && \
    mkdir -p /srv/cms

RUN rm /etc/nginx/nginx.conf
ADD nginx.conf /etc/nginx/nginx.conf
ADD thunder.conf /etc/nginx/sites-enabled/thunder.conf

ADD nginx-supervisor.ini /etc/supervisor.d/nginx-supervisor.ini

WORKDIR "/srv/cms"
VOLUME "/srv/cms"

EXPOSE 80
EXPOSE 8080
EXPOSE 22

CMD ["/usr/bin/supervisord"]

当我用docker-compose up运行所有东西时,一切正常,我的卷被挂载到正确的位置。

但是挂载文件夹/srv/cms中的权限看起来是错误的。容器中用户为1000,组为50。user服务器无法在此文件夹中创建任何文件,因为它以用户"root“运行。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-21 20:15:45

1) 一般想法:Docker它不是流浪者。将两个不同的服务放入一个容器中是错误的!将其分割为两个不同的图像,并将它们链接在一起。不要做这种糟糕的图像。

检查并跟踪https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/

层的数量避免安装不必要的程序包每层仅运行一个进程container

  • Minimize

如果你这样做了:

你将移除你的supervisor

  • your can
  • of layers

它应该类似于(示例):

代码语言:javascript
复制
FROM alpine

RUN apk add --update \
    wget \
    curl
RUN apk add --update \
    php \
    php-fpm \
    php-pdo \
    php-json \
    php-openssl \
    php-mysql \
    php-pdo_mysql \
    php-mcrypt \
    php-ctype \
    php-zlib
RUN usermod -u 1000 www-data
RUN rm -rf /var/cache/apk/*

EXPOSE 9000

对于nginx,使用默认的镜像和挂载配置就足够了。docker-编写如下文件:

代码语言:javascript
复制
nginx:
  image: nginx
  container_name: site.dev
  volumes:
    - ./myconf1.conf:/etc/nginx/conf.d/myconf1.conf
    - ./myconf2.conf:/etc/nginx/conf.d/myconf2.conf
    - $PWD/cms:/srv/cms
  ports:
    - "80:80"
  links:
   - phpfpm
phpfpm:
  build: ./phpfpm/
  container_name: phpfpm.dev
  command: php5-fpm -F --allow-to-run-as-root
  volumes:
    - $PWD/cms:/srv/cms

2)将RUN usermod -u 1000 www-data添加到php容器的Dockerfile中,可以修复权限问题。

票数 7
EN

Stack Overflow用户

发布于 2020-01-23 20:56:25

对于高山版本,您需要使用:

代码语言:javascript
复制
RUN apk add shadow && usermod -u 1000 www-data && groupmod -g 1000 www-data
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36120679

复制
相关文章

相似问题

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