Phục vụ nghệ nhân Php không thể mở tệp đầu vào: nghệ nhân

Khi tôi chạy ứng dụng laravel của mình, tôi gặp lỗi Hình ảnh docker của Laravel Không thể mở tệp đầu vào. /var/www/html/nghệ nhân. Cuối cùng tôi đã tìm ra nguyên nhân cốt lõi của vấn đề, hãy để tôi chia sẻ nó với bạn

Tôi đã tạo ứng dụng của mình trong Laravel sail nhưng hiện tại tôi đang làm việc để làm cho ứng dụng chạy bên trong bộ chứa docker. Ứng dụng của tôi chạy tốt Tôi sử dụng docker-compose run nhưng trong quá trình xây dựng docker để tạo hình ảnh, tôi gặp lỗi

Vì tôi chạy nó trong một container docker, chúng tôi sẽ chẩn đoán bởi Laravel đang phàn nàn

TL;DR

Câu trả lời ngắn gọn là mã nguồn Laravel của bạn không thể truy cập được bởi tiến trình đang cố chạy nó

Trong trường hợp của tôi, tôi chạy Laravel trong bộ chứa docker bằng cách sử dụng

could not open input file: artisan
1

Để bắt đầu, tôi chạy ứng dụng bằng lệnh

could not open input file: artisan
2 (xem bên dưới cấu hình mà tôi có). Nó hoạt động tốt vì tôi có một tập đĩa được liên kết với mã nguồn (xem dòng đơn giản bên dưới). Điều này có nghĩa là quy trình
could not open input file: artisan
3 có quyền truy cập vào mã nguồn, vì vậy nó đã hoạt động

Khi tôi chạy quy trình xây dựng để tạo hình ảnh docker của mình

could not open input file: artisan
4, không có liên kết nào đến mã nguồn (xem đường chấm chấm bên dưới). Vì vậy, quá trình xây dựng không thành công với lỗi đó

Laravel docker image Could not open input file: /var/www/html/artisan

tùy thuộc vào thiết lập của bạn, bạn có thể nhận được thông báo lỗi thay thế này

could not open input file: artisan

Đây là một lược đồ thiết lập của tôi

graph
direction LR;
A[Source code]
B[docker-compose up process]
C[docker build process]

B-->A
C-.->A

thiết lập của tôi

Thiết lập của tôi khá giống với thiết lập laravel mà tôi đã làm với docker trong bài viết này. Ý tưởng là gói ứng dụng của bạn bên trong một hình ảnh docker, sau đó sử dụng hình ảnh đó trong các dịch vụ docker khác để xây dựng thứ gì đó lớn hơn

Kịch bản để bắt đầu vùng chứa

Tôi đã tạo tập lệnh này để chạy các bước cần thiết để khởi động ứng dụng

Nó xử lý các vấn đề về quyền và sau đó sử dụng ________ 01 để khởi động ứng dụng

Ở giai đoạn này, mã nguồn của ứng dụng được giả định là trong hình ảnh vùng chứa

could not open input file: artisan
6

#!/usr/bin/env bash

if [ ! -z "$WWWUSER" ]; then
    usermod -u $WWWUSER sail
fi

if [ ! -d /.composer ]; then
    mkdir /.composer
fi

chmod -R ugo+rw /.composer

if [ $# -gt 0 ];then
    exec gosu $WWWUSER "[email protected]"
else
    /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf
fi

Tệp cấu hình

could not open input file: artisan
1 bên dưới

could not open input file: artisan
1

Dockerfile để xây dựng hình ảnh

Đây là Dockerfile tôi đã sử dụng để xây dựng hình ảnh. Bạn có thể thấy rằng không có hướng dẫn sao chép mã nguồn bên trong hình ảnh vùng chứa

Nhưng ở cuối tệp có lệnh ENTRYTPOINT yêu cầu vùng chứa chạy tập lệnh mà chúng ta đã tạo ở trên

could not open input file: artisan
2

Thiết lập docker-compose

Đây là ngăn xếp docker-compose của tôi. Nó được thiết kế để đóng gói mọi thứ lại với nhau. Ứng dụng Laravel được xây dựng từ

could not open input file: artisan
8 mà chúng ta đã tạo trước đây

Nó ánh xạ mã nguồn từ thư mục hiện tại (nơi đặt

could not open input file: artisan
9)

could not open input file: artisan
5

Vấn đề

Tại sao nó không thành công trong quá trình xây dựng docker

Nguyên nhân gốc rễ liên quan đến sự hiện diện của mã nguồn

Lỗi bên dưới được đưa ra khi

  • xây dựng hình ảnh vùng chứa
  • ENTRYPOINT chạy tập lệnh để khởi động vùng chứa
  • could not open input file: artisan
    
    1 cố gắng chạy mã và sau đó 💥 (mã nguồn bị thiếu)

Laravel docker image Could not open input file: /var/www/html/artisan

Tại sao nó hoạt động trong thời gian

Khi tôi chạy ứng dụng bằng lệnh

could not open input file: artisan
2. Nó hoạt động tốt vì tôi có một tập được liên kết với mã nguồn

could not open input file: artisan
9

Điều này có nghĩa là quy trình

could not open input file: artisan
3 có quyền truy cập vào mã nguồn, vì vậy nó đã hoạt động

Giải pháp

Để giải quyết vấn đề, bạn cần thêm lệnh COPY vào tệp

could not open input file: artisan
8

Mã nguồn nằm trong thư mục hiện tại. Hướng dẫn sẽ sao chép nguồn vào ví dụ

could not open input file: artisan
2

Đây là Dockerfile hoàn chỉnh

could not open input file: artisan
0

Phần kết luận

Thật tuyệt khi có thể xác định nguyên nhân gốc rễ. Hy vọng bạn thích nó. Hãy cùng chia sẻ suy nghĩ của bạn tại phần bình luận

Không thể mở tệp đầu vào thủ công làm thế nào để giải quyết vấn đề này?

Lỗi này xảy ra do bạn chưa cài đặt trình soạn thảo trong dự án của mình. Để giải quyết vấn đề này, chỉ cần thay đổi quyền của tệp thủ công .

Không thể mở tệp đầu vào phục vụ Laravel?

Lỗi này chủ yếu xảy ra khi người dùng cố mở dự án Laravel bên ngoài thư mục dự án . Laravel chỉ có thể thực thi dự án nếu chúng ta mở nó bên trong thư mục dự án. Đó là lỗi nói 'không thể mở tệp đầu vào'.

Làm cách nào tôi có thể chạy Laravel 9 mà không cần phục vụ thủ công php?

và bạn có thể chạy laravel mà không cần thủ công. Nếu bạn đổi tên máy chủ. php và sao chép. .
Thay đổi tên tệp. thay đổi phục vụ. php để lập chỉ mục. .
Di chuyển. tập tin htaccess Mang ". .
Khởi động lại máy chủ cục bộ của bạn. Bạn chỉ cần 1 cú nhấp chuột. .
Vui thích

Làm cách nào để kiểm tra phiên bản của Laravel?

Mọi bản phát hành Laravel đều có phiên bản của khung là hằng số trong Ứng dụng. tập tin php. Bạn có thể truy cập hằng số này thông qua trình trợ giúp app() . Nếu bạn không muốn tạo /test route để lấy phiên bản, bạn có thể sử dụng php artisan tinker để truy cập REPL của tinker và chạy nó từ đó.