首页 > 解决方案 > docker build 失败,在`nginx -t`上出现“permission denied”

问题描述

我在fpm-stretch基于 php docker 映像的顶部安装 nginx,复制一些配置,然后nginx -tDockerfile.
那一个失败了nginx: [emerg] open() "/tmp/nginx.pid" failed (13: Permission denied)

配置包含pid /tmp/nginx.pid;.

Dockerfile

FROM php:7.3.11-fpm-stretch
run apt-get update && apt-get install -y nginx nginx-extras
COPY .system_conf/nginx/nginx.conf /etc/nginx/nginx.conf
COPY .system_conf/nginx/real-ip.conf /etc/nginx/real-ip.conf
COPY .system_conf/nginx/app.conf /etc/nginx/sites-enabled/default
run touch /tmp/nginx.pid
run chown -R www-data:www-data /tmp/nginx.pid /etc/nginx /var/www /usr/local/etc/php-fpm*
run ls -la /tmp/nginx.pid
run whoami
run nginx -t

构建输出是:

Step 6/10 : run touch /tmp/nginx.pid
 ---> Running in b78b8c25da6e
Removing intermediate container b78b8c25da6e
 ---> 0ca504a62dcc
Step 7/10 : run chown -R www-data:www-data /tmp/nginx.pid /etc/nginx /var/www /usr/local/etc/php-fpm*
 ---> Running in 6d0e3e6e0085
Removing intermediate container 6d0e3e6e0085
 ---> 5801bebe1238
Step 8/10 : run ls -la /tmp/nginx.pid
 ---> Running in 3779596a2bf9
-rw-r--r-- 1 www-data www-data 0 Aug  5 13:19 /tmp/nginx.pid
Removing intermediate container 3779596a2bf9
 ---> fa5fb9b67a43
Step 9/10 : run whoami
 ---> Running in 3c501d3ef8d0
root
Removing intermediate container 3c501d3ef8d0
 ---> f4c8d7c894a3
Step 10/10 : run nginx -t
 ---> Running in 91687a1ea4d2
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: [emerg] open() "/tmp/nginx.pid" failed (13: Permission denied)
nginx: configuration file /etc/nginx/nginx.conf test failed

真正奇怪的事情来了:
这发生在我同事的电脑上。在我的电脑上,一切正常。
我们都在运行 ubuntu(我 18.04,他 20.04)和相同的 docker 版本(19.03)。

更新 1:
我这样做chmod 777 /tmp/nginx.pidDockerfile,我得到了同样的错误。

标签: dockernginxdockerfile

解决方案


您可能需要授予该文件的权限nginx.pid

尝试这个:

FROM php:7.3.11-fpm-stretch
RUN apt-get update && apt-get install -y nginx nginx-extras
COPY .system_conf/nginx/nginx.conf /etc/nginx/nginx.conf
COPY .system_conf/nginx/real-ip.conf /etc/nginx/real-ip.conf
COPY .system_conf/nginx/app.conf /etc/nginx/sites-enabled/default
RUN touch /tmp/nginx.pid
RUN chmod 755 /tmp/nginx.pid
RUN chown -R www-data:www-data /tmp/nginx.pid /etc/nginx /var/www /usr/local/etc/php-fpm*
RUN ls -la /tmp/nginx.pid
RUN whoami
RUN nginx -t

推荐阅读