docker сборка завершается неудачно с "отказано в разрешении" на `nginx -t` - PullRequest
0 голосов
/ 05 августа 2020

Я устанавливаю nginx поверх образа php docker на основе fpm-stretch, копирую некоторую конфигурацию и затем запускаю nginx -t в Dockerfile. Тот не работает с 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.pid в Dockerfile и получаю ту же ошибку.

Ответы [ 3 ]

1 голос
/ 05 августа 2020

Две вещи, которые нужно проверить:

  1. Снова вытащите базовый образ, вполне возможно, что они что-то сделали со своим: docker pull php:7.3.11-fpm-stretch

  2. Проверьте, включен ли SE Linux на хосте или docker движке (docker info).

1 голос
/ 05 августа 2020

Возможно, вам потребуется предоставить права доступа к файлу 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
0 голосов
/ 07 августа 2020

Мне нужно было добавить директиву user в 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
user www-data
run whoami
run nginx -t

Я до сих пор не знаю, почему она будет работать на ubuntu 18.04, но не на 20.04.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...