我通过本地docker-machine VM在OSX 10.11中运行Docker 1.8.1。
我有以下docker-compose.yml:
web:
build: docker/web
ports:
- 80:80
- 8080:8080
volumes:
- $PWD/cms:/srv/cms
我的Dockerfile看起来像这样:
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”。Web服务器无法在此文件夹中创建任何文件,因为它以用户“root”运行。
3条答案
按热度按时间vwoqyblh1#
1)总体思路:Docker不是Vagrant。把两个不同的服务放在一个容器里是错误的!把它分成两个不同的镜像并链接在一起。不要做这个糟糕的镜像。
检查并遵循https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/
如果你这样做:
它应该是这样的(示例):
对于nginx,使用默认镜像和挂载configs. docker-compose文件就足够了,比如:
2)将
RUN usermod -u 1000 www-data
添加到PHP容器的Dockerfile中,它将修复权限问题。bgibtngc2#
对于alpine版本,您需要用途:
au9on6nz3#
主机将权限授予UID = 1000和GID = 1000,但它们不是Docker镜像中的有效用户或组。
在映像中执行的这些命令将为这些ID分配“www-data”;
usermod -u 1000 www数据
groupmod -g 1000 www-data
我可以从Docker Desktop、PHP-FPM、Terminal运行它们