错误:mkdir与chown在Dockerfile中不起作用(带有php-fpm的nginx)

时间:2016-12-08 13:43:56

标签: php nginx docker docker-compose dockerfile

对于版本控制和安全性,我想将两个Dockerfiles合并为一个,然后为.sock =>创建一个目录。运行rmdir和chown。 没有rmdir和chown,如果在端口上运行,我可以完美地构建docker:9000。一旦我尝试为.sock设置目录,就在dockerfile中,docker build进程退出。以下所有细节。非常感谢您的帮助。

第一个Dockerfile一半

FROM debian:jessie

ENV NGINX_VERSION 1.11.6-1~jessie


RUN apt-key adv --keyserver hkp://pgp.mit.edu:80 --recv-keys 573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62 \
        && echo "deb http://nginx.org/packages/mainline/debian/ jessie nginx" >> /etc/apt/sources.list \
        && apt-get update \
        && apt-get install --no-install-recommends --no-install-suggests -y \
                                                ca-certificates \
                                                nginx=${NGINX_VERSION} \
                                                nginx-module-xslt \
                                                nginx-module-geoip \
                                                nginx-module-image-filter \
                                                nginx-module-perl \
                                                nginx-module-njs \
                                                gettext-base \
        && rm -rf /var/lib/apt/lists/*

# forward request and error logs to docker log collector
RUN ln -sf /dev/stdout /var/log/nginx/access.log \
        && ln -sf /dev/stderr /var/log/nginx/error.log


EXPOSE 80 443
#CMD ["nginx", "-g", "daemon off;"]

第二个Dockerfiel一半 with this PHP code以及此代码上方各级别的文件。 我没有公开9000端口并注释掉CMD。 然后通过supervisord管理所有内容。

我在docker-compose的帮助下构建它

version: '2'

services:
  web:
    build:
      context: ../../builds/nx1116Php71RC6Comp123_J
      dockerfile: Dockerfile
    image:
      tl_nx1116php71rc6comp123:v1
    #mounts HOST:CONTAINER (the actual server to the container system)
    volumes:
      #nginx
      - ../../data/nxphp/nginx1116/html:/usr/share/nginx/html
      - ../../data/nxphp/nginx1116/conf.d:/etc/nginx/conf.d
      - ../../logs/nxphp:/var/log/nginx
      #PHP
      - ../../data/nxphp/php71fpm/etc:/usr/local/etc
#      - ../../logs/nxphp/php71fpm:?????
      #Supervisor
      - ../../data/nxphp/supervisor/supervisor.conf:/etc/supervisor.conf
      - ../../logs/supervisor:/var/log/supervisor
    #foward port HOST:CONTAINER
    ports:
      - "80:80"
      - "443:443"

当我这样运行时,设置php和nginx confs以使用9000一切正常。

但是我想和.sock谈谈。没有,所以我需要创建一个/目录,其中nginx可以放置它。因此,在我的脑海中,我放在我的泊坞文件的末尾

RUN set -xe \
        mkdir -p /var/run/php-fpm
        && chown www-data:www-data /var/run/php-fpm

但总是以建筑错误结束。当我执行部分构建的docker镜像时,我找不到/ var / run / php-fpm。我也尝试将它放入/运行,但结果相同。从它做两个RUN命令"工作"这样,我没有错误,但文件夹仍然不存在,然后显然我的图像退出它找不到.sock文件夹。

&安培;&安培; {echo' [global]&#39 ;; echo' daemonize = no&#39 ;;回声; echo' [www]&#39 ;; echo' listen = [::]:9000&#39 ;; } | tee php-fpm.d / zz-docker.conf  --->使用缓存  ---> 609c93af398d 步骤22:运行设置-xe mkdir -p / var / run / php-fpm&& chown www-data:www-data / var / run / php-fpm  --->在de4b7443a82a中运行 + chown www-data:www-data / var / run / php-fpm chown:无法访问' / var / run / php-fpm':没有这样的文件或目录 错误:服务'网络'无法构建:命令' / bin / sh -c set -xe mkdir -p / var / run / php-fpm&& chown www-data:www-data / var / run / php-fpm'返回非零代码:1

任何帮助都将受到高度赞赏

1 个答案:

答案 0 :(得分:1)

这一行有两个错误:

RUN set -xe \
    mkdir -p /var/run/php-fpm
    && chown www-data:www-data /var/run/php-fpm

首先,mkdir是没有&&分隔符的集合的arg。第二个是&& chown ...被视为dockerfile命令,因为前一行没有\结束。这是更正后的语法:

RUN set -xe \
 && mkdir -p /var/run/php-fpm \
 && chown www-data:www-data /var/run/php-fpm