Docker容器中容量错误

我通过本地docker-machine虚拟机在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”。 networking服务器无法在该文件夹中创build任何文件,因为它以用户“root”运行。

1) 总体思路 :Docker不是stream浪者。 将两个不同的服务放在一个容器中是错误的! 将其分成两个不同的图像并将它们链接在一起。 不要做这个低劣的形象。

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

  • 避免安装不必要的软件包
  • 每个容器只运行一个进程
  • 最小化层数

如果你这样做:

  • 你会删除你的主pipe
  • 你可以减less层数

应该是这样的(例子):

 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来说,使用默认图像和挂载configuration就足够了。 docker – 撰写文件,如:

 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)将php用户名mod RUN usermod -u 1000 www-data到Dockerfile for php容器中,修复权限问题。