Привет! Недавно начал изучать Docker, вторые сутки бьюсь с проблемой, что при создании контейнера не создаётся папка vendor при выполнении команды
composer install
через Docker.
Проект представляет из себя веб-приложение, которое работает со сторонним API. API ключ хранится в .ENV, для работы с которым установлена библиотека, которая и должна тянуться с помощью vendor/autoload.php
Что попробовал:
1. Посмотрел логи. Папка vendor генерируется, но ни я, ни веб-сервер не можем получить информацию о её существовании через
ls -ln.
О существовании папки знаю только благодаря строчке
RUN composer install --no-dev --optimize-autoloader \
&& echo "Composer install completed" \
&& ls -la /var/www/html/git \
&& ls -la /var/www/html/git/vendor
2. Папка vendor успешно создаётся, если подключившись к контейнеру через
docker exec -it <id> bash
ввожу
composer install
. В этом случае проблем с доступом к ней не возникает.
Проект планируется переносить на сервер, к которому у меня не будет доступа — поэтому мне важно реализовать именно автоматическую сборку папки vendor при запуске контейнера.
Возможно, проблема исходит от прав, но разобраться самостоятельно в проблеме не удалось. Буду рад, если подскажете решение или укажите, в какую сторону копать. Код прикладываю:
docker-compose.yml
services:
web:
build: .
ports:
- "80:80"
volumes:
- .:/var/www/html/git
environment:
- API_KEY=${API_KEY}
dockerfile
# Используем официальный образ PHP с Apache
FROM php:7.4-apache
# Устанавливаем рабочую директорию
WORKDIR /var/www/html/git
# Копируем файлы приложения в контейнер
COPY . .
# Устанавливаем зависимости для Composer
RUN apt-get update && apt-get install -y \
libzip-dev \
unzip \
&& docker-php-ext-install zip
# Устанавливаем Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
# Копируем файлы Composer
COPY composer.json composer.lock ./
# Устанавливаем права для директории перед выполнением composer install
RUN chown -R www-data:www-data /var/www/html/git \
&& chmod -R 755 /var/www/html/git
RUN composer install --no-dev --optimize-autoloader \
&& echo "Composer install completed" \
&& ls -la /var/www/html/git \
&& ls -la /var/www/html/git/vendor
# Устанавливаем права для директории после установки зависимостей
RUN chown -R www-data:www-data /var/www/html/git/vendor \
&& chmod -R 755 /var/www/html/git/vendor
# Открываем порт 80
EXPOSE 80
composer.json, composer.lock, docker-composer.yml и dockerfile лежат в одной папке.