Я пытаюсь установить композитор в контейнер докеров. У меня есть контейнер laravel55, и я собираюсь установить в него композитор.
docker exec laravel55 curl --silent --show-error
https://getcomposer.org/installer | php
#result
Composer (version 1.6.5) successfully installed to: /root/docker-
images/docker-php7-apache2/composer.phar
Use it: php composer.phar
После установки, я пытаюсь использовать composer, но не работает:
docker exec -w /var/www/html laravel55 php composer.phar install
#result
Could not open input file: composer.phar
Похоже, Composer не установился! Как я могу установить композитор в контейнер докеров?


Что ж, с вашей командой вы фактически устанавливаете composer.phar локально на своем хосте, вы просто выполняете команду curl внутри контейнера. Часть, стоящая за символом канала |, выполняется не в вашем докер-контейнере, а на вашем хосте. Во второй команде вы переключаете свой рабочий каталог на /var/www/html, где вы, очевидно, ожидаете composer.phar, но не в первой команде.
Итак, чтобы запустить всю команду в контейнере, вы можете попробовать следующее:
docker-compose exec -w /var/www/html laravel55 \
sh -c "curl --silent --show-error https://getcomposer.org/installer | php"
Это сработало, спасибо. Я по ошибке написал docker-compose вместо docker, поэтому обновил свой вопрос.
Вы можете использовать официальный образ композитора из dockerhub и смонтировать на нем том из контейнера вашего приложения.
т.е.
docker run -td --name my_app --volume /var/www myprivateregistry/myapp
docker run --rm --interactive --volumes-from my_app --volume /tmp:/tmp --workdir /var/www composer install
Я в замешательстве. Работает ли composer install в /var/www?
/ var / www - это том из вашего контейнерного приложения
Вам следует прочитать официальное руководство Docker по созданию и запуску пользовательских образов. Обычно вы не устанавливаете программное обеспечение в работающий контейнер с помощью
docker exec, потому что все, что вы делаете, будет потеряно, как только контейнер закроется.