【问题标题】:ERROR: mkdir with chown not working in Dockerfile (nginx with php-fpm)错误:带有 chown 的 mkdir 在 Dockerfile 中不起作用(带有 php-fpm 的 nginx)
【发布时间】:2017-04-23 18:49:45
【问题描述】:

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

第一个 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可以把它放在那里。因此,在我看来,我把我的 docker 文件放在了末尾

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

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

&& { 回声'[全局]'; echo 'daemonize = no';回声;回声'[www]'; echo '听 = [::]:9000'; } |三通 php-fpm.d/zz-docker.conf ---> 使用缓存 ---> 609c93af398d 第 22 步:运行 set -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': 没有这样的文件或目录 错误:服务'web'未能构建:命令'/bin/sh -c set -xe mkdir -p /var/run/php-fpm && chown www-data:www-data /var/run/php-fpm ' 返回一个非零代码:1

任何帮助将不胜感激

【问题讨论】:

    标签: php nginx docker docker-compose dockerfile


    【解决方案1】:

    这一行有两个错误:

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

    第一个是mkdir 是一个没有&& 分隔符的集合参数。第二个是&& chown ... 被视为 dockerfile 命令,因为上一行以没有\ 结尾。这是正确的语法:

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

    【讨论】:

    • 谢谢!我不敢相信我错过了。我有反斜杠(复制时丢失了),但我错过了 && mkdir。我看了那个声明 2 个小时,只是没有看到它。甚至尝试使用; 和分离............grrrrrrrrrrrrrrrrrrr。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-14
    • 2017-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多