localhost nenačte autoload php při docker compose up

Alda
Člen | 4
+
0
-

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
+
+1
-

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/
Alda
Člen | 4
+
0
-

Po změnění hodnot to vypisuje:

AH01276: Cannot serve directory /var/www/html/: No matching DirectoryIndex (index.php,index.html) found, and server-generated directory index forbidden by Options directive

Jan Tvrdík
Nette guru | 2595
+
0
-

/var/www/html/ se nemá vůbec používat. zkus to vypnout a zapnout.

Alda
Člen | 4
+
0
-

Zkusil jsem celý conteiner smazat a vytvořit nový. Stále ta samá hláška …

Zkusil jsem to celé hodit na Gitlab.
Jestli náhodou mi ještě někde něco neunikáá…

Jan Tvrdík
Nette guru | 2595
+
+1
-

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';

Alda
Člen | 4
+
0
-

Tak to vypadá že po úpravě výše zmíněných chyb je soubor Index.php přístupitelný. DÍKY!

Jen mě to nějakým způsobem nechce pustit k databázi, ale to už bude asi jen nějaká neshoda údajů.