gpt4 book ai didi

php - 找不到PHP Docker供应商Autoload.php

转载 作者:行者123 更新时间:2023-12-02 19:58:19 25 4
gpt4 key购买 nike

我正在尝试为PHP服务设置Dockerfile。 PHP脚本是使用docker容器中的Nginx服务器提供的,但是它给了我vendor / autoload.php找不到错误。

我已经尝试过多次更改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



脚本应该可以正常工作,但是每当我运行docker log时,它都会说。
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文件中有什么问题吗?

最佳答案

抱歉,上次回复我误解了这个问题。

但是,我能够构建类似的容器,但无法重现该错误。您所添加的php脚本可能与本文无关。尽管可以使用Dockerfile + nginx.conf的修改后的副本来获得类似的容器构建。我还在Docker文件中添加了一些用于故障排除的调试,并创建了启动/构建脚本。

我编辑了Dockerfile以使其具有以下内容。如果需要,这将添加设置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以使其具有以下内容。添加了解析器信息(不确定此信息是否适用于您),包括上游属性,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;
}
}

然后创建一个Shell脚本以启动构建并报告一些调试信息。将其添加到Docker主机上的Dockerfile旁边,使用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,这不是问题。那是您要从该文件夹复制到容器中的东西吗?

关于php - 找不到PHP Docker供应商Autoload.php,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56247262/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com