Докер: Композитору не удалось найти файл composer.json в /app

#php #laravel #docker #dockerfile #debian

#php #ларавель #докер #докерфайл #дистрибутив debian

Вопрос:

Привет, у меня проблема с запуском Dockerfile в Debian S390x. Когда я использую команду:

 docker build -t laravel .  

У меня есть информация об ошибке:

 Composer could not find a composer.json file in /app To initialize a project, please create a composer.json file. See https://getcomposer.org/basic-usage  

Мой Док-файл:

 FROM php:7.4 RUN apt-get update -y amp;amp; apt-get install -y openssl zip unzip git RUN apt-get install libonig-dev RUN curl -sS https://getcomposer.org/installer | php RUN mv composer.phar /usr/local/bin/composer RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer RUN docker-php-ext-install pdo mbstring WORKDIR /app COPY . /app RUN composer install  CMD php artisan serve --host=0.0.0.0 --port=8181 EXPOSE 8181  

Пожалуйста, помогите

Изображение ошибки :

Комментарии:

1. Можете ли вы поделиться содержимым каталога, в котором вы Dockerfile живете ? ошибка, очевидно, заключается в том, что докер жалуется на отсутствие composer.json файла при запуске composer install.

2. root@zDEB:/home/test/Laravel# ls Докер-файл

3. есть ли composer.json файл в каталоге, который вы копируете COPY . /app ? это должен быть, например, действительный проект laravel. таким образом, он копирует все файлы, включая composer.json и т. Д

4. Я понимаю, что я должен поместить его в свой файл container composer.json, потому что я должен установить требования для своего проекта

5. Да, я ошибаюсь, я думал, что получу прозрачный контейнер с laravel, но я должен поместить в него свое приложение, чтобы запустить все, спасибо за помощь ;3

Ответ №1:

Вы копируете его не в тот каталог по адресу:

 COPY . /app  

Потому что ранее вы определили рабочий код:

 WORKDIR /app  

Теперь содержимое будет скопировано в:

 /app/app  

Поэтому измените COPY на текущий каталог, потому что вы уже находитесь в /app :

 COPY . .  

Комментарии:

1. Если местом назначения COPY команды является абсолютный путь, файлы будут скопированы туда, игнорируя WORKDIR ; то же самое, как если бы вы cp composer.json /app работали в родном Linux. (Источник всегда находится относительно каталога контекста сборки, даже если он выглядит как абсолютный путь.)