PHP Docker Vendor Autoload.php не найден - PullRequest
1 голос
/ 22 мая 2019

Я пытаюсь настроить Dockerfile для служб PHP.Сценарии PHP обрабатываются с использованием сервера Nginx в Docker-контейнере, но это дает мне ошибку vendor / autoload.php not found.

Я несколько раз пытался изменить Dockerfile, но ошибка vendor / autoload.php по-прежнему сохраняется.

Вот Dockerfile

FROM composer as builder

RUN mkdir -p /usr/app/php-services
WORKDIR /usr/app/php-services
#copy composer file
COPY composer.json .


RUN composer install

#copy php-scripts to /usr/app/php-services
COPY . .


FROM nginx:alpine

COPY --from=builder /usr/app/php-services /usr/app/php-services
COPY ./phpdocker/nginx/nginx.conf /etc/nginx/conf.d/default.conf

#check if vendor has autoload file and it exists!!!
RUN ls /usr/app/php-services/vendor

EXPOSE 8000


Скрипты должны работать нормально, но всякий раз, когда я запускаю докерские логи, он говорит.enter image description here

Вот файл nginx.conf

server {
listen 8000;


access_log /var/log/nginx/application.access.log;


root /usr/app/php-services;

location / {
    try_files $uri /index.php$is_args$args;
}

location ~ \.php$ {
    fastcgi_pass php-fpm:9000;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PHP_VALUE "error_log=/var/log/nginx/application_php_errors.log";
    fastcgi_buffers 16 16k;
    fastcgi_buffer_size 32k;
    include fastcgi_params;
}
}

Я перепробовал почти все, и буквально понятия не имею, почему этопроисходит.Что я здесь не так делаю?Есть ли проблема в моем файле nginx.conf?

1 Ответ

0 голосов
/ 22 мая 2019

Извините за последний ответ, я неправильно понял проблему.

Однако я смог создать аналогичный контейнер, но не смог воспроизвести ошибку.Это может быть что-то с добавляемыми вами php-скриптами, которых нет в этом посте.Мне удалось получить аналогичную сборку контейнера, хотя с использованием модифицированных копий вашего Dockerfile + nginx.conf.Я также добавил некоторую отладку для устранения неполадок в файл Docker и создал скрипт запуска / сборки.

Я отредактировал файл Docker, чтобы получить следующее.Это добавит настройку 755 разрешений, если вам нужно, перечислив несколько рассматриваемых каталогов и ваш журнал.При необходимости опубликуйте этот вывод в комментариях.

FROM composer as builder
RUN mkdir -p /usr/app/php-services 
WORKDIR /usr/app/php-services
COPY composer.json . 
RUN composer install
#copy php-scripts to /usr/app/php-services
COPY . .
COPY php.ini /usr/app/php-services
FROM nginx:alpine
COPY --from=builder /usr/app/php-services /usr/app/php-services
COPY nginx.conf /etc/nginx/conf.d/default.conf 
COPY php.ini .
#check if vendor has autoload file and it exists!!!
RUN chmod 755 -R /usr/app/php-services;ls -lrt /etc/nginx/ /var/log /usr/app/php-services/  /usr/app/php-services/vendor /usr/app/php-services/vendor/twitter.php;/var/log/nginx/application_php_errors.log | tee -a shellcheck.log
    #CMD ["ls -la /usr/app/php-services/vendor"]
EXPOSE 8000

Затем отредактируйте файл nginx.conf, чтобы получить следующее.Добавлена ​​информация о преобразователе (не уверена, применимо ли это к вам или нет), включая свойство upstream, try_files, включая фрагменты для fastcgi.

    server {
listen 8000;
resolver 127.0.0.11;
set $upstream php-fpm:9000;
access_log /var/log/nginx/application.access.log;
root /usr/app/php-services;
location / {
try_files $uri /index.php$is_args$args;
}
location ~ \.php$ {
try_files $uri =404;
include snippets/fastcgi-php.conf;
fastcgi_pass  $upstream;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PHP_VALUE "error_log=/var/log/nginx/application_php_errors.log";
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
include fastcgi_params;
}
}

Затем был создан сценарий оболочки для запуска сборки и выдачи некоторой отладочной информации.Добавьте это рядом с Dockerfile на хосте Docker, сделайте его исполняемым с помощью chmod + x run-container.sh, затем запустите его с помощью ./run-container.sh $ PORTNUM.т.е. ./run-container.sh 8000

    #!/bin/bash
docker build . -t php-services:v3 
docker run -d -p $1:8000 php-services:v3
CONTAINER=`docker ps -a | head -2 | tail -1| awk '{print $1}'`
echo "Your container is: $CONTAINER"
docker ps -a | head -2 | tail -1| awk '{print $1}'
docker cp $CONTAINER:/var/log/nginx/ .
docker cp $CONTAINER:/shellcheck.log .
docker cp $CONTAINER:/etc/nginx/fastcgi.conf .
docker ps -a  | grep $CONTAINER
docker logs  $CONTAINER

Дайте мне знать, если что-то из этого работает для вас, по какой-то причине ваш ожидает twitter.php, которого у меня нет и не было проблемой,Это то, что вы копируете в контейнер из этой папки?

...