localhost nenačte autoload php při docker compose up
- Alda
- Člen | 4
Mám vytvořený projekt pomocí příkazu „composer create-project nette/web-project employees“.
Když spustím docker-compose up, příkaz mi vytvoří kontejner
v dockeru.
phpmyadmin - funkční.
databáze - funkční.
php-apache - funkční, ale localhost:80 hlásí:
Warning: require(/var/www/html/vendor/autoload.php): Failed to open stream:
No such file or directory in /var/www/html/index.php on line 5
Fatal error: Uncaught Error: Failed opening required
‚/var/www/html/vendor/autoload.php‘
(include_path=‚.:/usr/local/lib/php‘) in /var/www/html/index.php:5 Stack
trace: #0 {main} thrown in /var/www/html/index.php on line 5
index.php vypádá následovně:
<?php
declare(strict_types=1);
require __DIR__ . '/vendor/autoload.php';
$configurator = App\Bootstrap::boot();
$container = $configurator->createContainer();
$application = $container->getByType(Nette\Application\Application::class);
$application->run();
docker-compose.yml vypadá následovně:
version: '3.8'
services:
php-apache-environment:
container_name: php-apache
image: php:8.0-apache
volumes:
- ./www:/var/www/html/
ports:
- 80:80
links:
- db
environment:
APACHE_DOCUMENT_ROOT: /var/www/html/
db:
image: mysql:latest
container_name: db
restart: always
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: quickstart
volumes:
- ./sql/create.sql:/docker-entrypoint-initdb.d/create.sql
phpmyadmin:
container_name: phpmyadmin
image: phpmyadmin:latest
ports:
- "8080:80"
environment:
MYSQL_ROOT_PASSWORD: wakimide
PMA_HOST: db
composer.json vypadá následovně:
{
"name": "nette/web-project",
"description": "Nette: Standard Web Project",
"keywords": ["nette"],
"type": "project",
"license": ["MIT", "BSD-3-Clause", "GPL-2.0", "GPL-3.0"],
"require": {
"php": ">= 7.2",
"nette/application": "^3.1",
"nette/bootstrap": "^3.1",
"nette/caching": "^3.1",
"nette/database": "^3.1",
"nette/di": "^3.0",
"nette/finder": "^2.5",
"nette/forms": "^3.1",
"nette/http": "^3.1",
"nette/mail": "^3.1",
"nette/robot-loader": "^3.3",
"nette/security": "^3.1",
"nette/utils": "^3.2",
"latte/latte": "^2.9",
"tracy/tracy": "^2.8"
},
"require-dev": {
"nette/tester": "^2.3",
"symfony/thanks": "^1"
},
"autoload": {
"psr-4": {
"App\\": "app"
}
},
"minimum-stability": "stable",
"config": {
"allow-plugins": {
"symfony/thanks": true
}
}
}
Struktura projektu je:
├───app
│ ├───Model
│ ├───Presenters
│ │ └───templates
│ └───Router
├───bin
├───config
├───log
├───sql
├───vendor
│ └──autoload.php
└───www
Z nějakého důvodu __DIR__ vrací hodnotu „/var/www/html/“.
SQL dotaz vytvoří tabulku a naplní jí daty.
Věděl by někdo, jak vyřešit tento problém ? Když použiji XAMP pro MYSQL databázi a poté příkaz v CMD „php -S localhost:80 -t www“ tak vše běží tak jak má…
composer install vyzkoušeno.
composer update vyzkoušeno.
Doplnit autoload „classmap“: [„app/Bootstrap.php“] vyzkoušeno.
Změnit cestu /www:/var/www/html/ vyzkoušeno… z nějakého důvodu tam musí
být to ":/var/www/html/
- Jan Tvrdík
- Nette guru | 2595
V tom dockeru vůbec nemáš soubory aplikace.
Zkus místo
volumes:
- ./www:/var/www/html/
dát
volumes:
- ./:/__app__
a místo
environment:
APACHE_DOCUMENT_ROOT: /var/www/html/
dát
environment:
APACHE_DOCUMENT_ROOT: /__app__/www/
- Jan Tvrdík
- Nette guru | 2595
Vypadá, že php:8.0-apache
vůbec nic jako
APACHE_DOCUMENT_ROOT
nepodporuje. Můžeš tam místo toho zkusit
dát thecodingmachine/php:8.0-v4-apache
.
Kromě toho máš blbe cestu k autoloadu. Místo
require __DIR__ . '/vendor/autoload.php';
má
být require __DIR__ . '/../vendor/autoload.php';