Как установить PHP-композитор внутри контейнера докеров

Я пытаюсь разработать способ создания среды разработки с помощью docker и laravel.

У меня есть следующий файл докеров:

FROM php:7.1.3-fpm

RUN apt-get update && apt-get install -y libmcrypt-dev \
    mysql-client libmagickwand-dev --no-install-recommends \
    && pecl install imagick \
    && docker-php-ext-enable imagick \
&& docker-php-ext-install mcrypt pdo_mysql
&& chmod -R o+rw laravel-master/bootstrap laravel-master/storage

Laravel требует, чтобы композитор вызвал composer dump-autoload при работе с миграцией базы данных. Поэтому мне нужен композитор внутри контейнера докеров.

Я пытался:

RUN curl -sS https://getcomposer.org/installer | php -- \
--install-dir=/usr/bin --filename=composer

Но когда я звоню

docker-compose up
docker-compose exec app composer dump-autoload

Выдает следующую ошибку:

rpc error: code = 13 desc = invalid header field value "oci runtime error: exec failed: container_linux.go:247: starting container process caused \"exec: \\\"composer\\\": executable file not found in $PATH\"\n"

Я был бы более чем счастлив получить совет, как добавить композитор в PATH в моем файле докеров или что еще я могу сделать, чтобы избежать этой ошибки.

Спасибо за вашу поддержку. Также: это - это репозиторий gitub, если вам нужно увидеть файл docker-compose.yml или что-то еще.

Есть ли необходимость изобретать велосипед? Почему бы не использовать готовые решения для docker, PHP и Laravel (например, Ларадок, который охватывает практически все, что вам нужно, и легко настраивается)?

d3jn 20.07.2018 15:30

В качестве альтернативы всегда есть возможность использовать композитор, поскольку .phar зарегистрирован как часть репозитория.

Namoshek 20.07.2018 15:31

Вы уверены, что ваш контейнер успешно построен? Этот скрипт уже делает композитор исполняемым. docker run -it --rm php: 7.1.3-fpm bash curl -sS getcomposer.org/installer | php - \ --install-dir = / usr / bin --filename = composer composer --version Composer version 1.6.5 2018-05-04 11:44:59 Значит, проблема не в самом докере или композиторе, вероятно неправильная конфигурация или какая-то проблема с docker-compose

AlTak 20.07.2018 15:57

@AITak, спасибо за ответ, проверю!

Andre 21.07.2018 10:30

@ d3jn, это первый раз, когда я работаю с докером, и я хочу перестроить этот ходячий скелет laravel + docker, чтобы учиться на нем. В любом случае спасибо, что указали на него, Ларадок!

Andre 21.07.2018 10:31
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
49
5
82 025
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

У нас в основном выполняется одна и та же команда с той разницей, что

--install-dir=/usr/local/bin

В качестве альтернативы вы должны добавить путь к bin-файлам композитора в переменную $ PATH.

export PATH=$PATH":/usr/bin"

Создайте исполняемый файл вашего файла композитора, используя

RUN curl -sS https://getcomposer.org/installer | php -- \
--install-dir=/usr/bin --filename=composer && chmod +x /usr/bin/composer 

К сожалению, все тот же код ошибки. У вас есть идеи, чего, возможно, еще не хватает?

Andre 20.07.2018 17:30
Ответ принят как подходящий

Я могу установить композитор, добавив эту строку в свой тестовый файл докеров:

# Install Composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

Вот файл докеров:

FROM php:7.1.3-fpm

RUN apt-get update && apt-get install -y libmcrypt-dev \
    mysql-client libmagickwand-dev --no-install-recommends \
    && pecl install imagick \
    && docker-php-ext-enable imagick \
&& docker-php-ext-install mcrypt pdo_mysql

# Install Composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

Это работает для меня, чтобы проверить, установлен ли композитор, я получаю доступ к моему контейнеру bash и выполняю:

composer --version
Composer version 1.6.5 2018-05-04 11:44:59

Разве composer --version не возвращает вывод с хост-машины? Или как вы это называете?

Darius.V 21.10.2020 15:21

вам нужно запустить образ, созданный с помощью команды docker run -dit my-image, после этого вам нужно выполнить docker exec -it container-id sh, и с помощью этой команды вы можете получить доступ к контейнерному терминалу, когда вы находитесь на контейнерном терминале, вы можете выполнить команду composer --version, чтобы убедиться, что он установлен на вашем контейнере

Brayan Caldera 21.10.2020 23:17

Поскольку Composer 2.0 отсутствует и многим проектам по-прежнему требуется версия 1.x, вы также можете передать --version установщику для конкретной версии Composer как таковой: RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer --version=1.10.22

Mihai MATEI 28.06.2021 10:13

В Dockerfile:

COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composer

Вау, я бы не подумал о таком. Браво

emmdee 07.01.2020 04:08

Просто имейте в виду, что --from довольно новый и будет доступен не во всех средах.

Fuzzy76 25.03.2020 10:39

Обратите внимание: если в вашем composer.json есть пакеты, которые можно установить только из исходного кода, вам также потребуется установить git.

luukvhoudt 30.06.2020 13:10

Это великолепно, спасибо за это

Fabien Papet 27.05.2021 11:37

Ну, блин. +1

waterloomatt 29.05.2021 03:53

Я просто хочу предложить другой способ.

Dockerfile:

RUN php -r "readfile('http://getcomposer.org/installer');" | php -- --install-dir=/usr/bin/ --filename=composer
FROM php:7.3-fpm-alpine
RUN docker-php-ext-install pdo pdo_mysql
RUN docker-php-ext-install mysqli && docker-php-ext-enable mysqli

RUN php -r "readfile('http://getcomposer.org/installer');" | php -- --install-dir=/usr/bin/ --filename=composer
RUN apk update
RUN apk upgrade
RUN apk add bash
RUN alias composer='php /usr/bin/composer'

Другие вопросы по теме