Я использую Laradock/Docker с веб-сервером apache2.
localhost указывает на /Users/paul/Sites (обычно на Mac Monterey)
У меня есть проект laravel 8, который находится в /Users/paul/Sites/ProjectX.
В /Users/paul/Sites/ProjectX/index.php у меня есть echo ДИР;
В браузере localhost/ProjectX возвращает /var/www/ProjectX. Почему в константе ДИР отсутствует папка "Сайты"? Это нормально?
Я рву на себе волосы... это кажется таким тривиальным, но я не могу найти ответ... пожалуйста, помогите.
Это работает точно, как и ожидалось.
__DIR__
предназначен для возврата абсолютного пути к каталогу текущего запущенного скрипта.
Ларадок использует привязать крепления для монтирования вашего «пути кода приложения» (/Users/paul/Sites/ProjectX
) на главная машина в докер-контейнер по этому «пути кода приложения» (/var/www/ProjectX
). Это позволяет вам немедленно просматривать изменения в коде вашего приложения, а не копировать поверх исходного кода при каждом изменении/редактировании.
# ...
workspace:
build:
context: ./workspace
args:
# ...
volumes:
- ${APP_CODE_PATH_HOST}:${APP_CODE_PATH_CONTAINER}${APP_CODE_CONTAINER_FLAG}
Имея это в виду, очевидно, что две среды имеют отдельные файловые системы.
Когда вы делаете HTTP-запрос в своем браузере на главная машина, этот HTTP-запрос будет «переадресован» на Docker-контейнер прослушивает этот конкретный порт. То есть:
# ...
ports:
- "${APACHE_HOST_HTTP_PORT}:80"
- "${APACHE_HOST_HTTPS_PORT}:443"
# ...
Понимая, что ваш HTTP-запрос будет обрабатываться определенным докер-контейнер (т. е. Apache/Nginx), а не главная машина, выполнение echo __DIR__;
приведет к тому, что сценарий будет иметь абсолютный путь к каталогу смонтированный на основе файловая система контейнера докеров.