So installieren Sie PHP Composer in einem Docker-Container

Lesezeit: 5 Minuten

Ich versuche, einen Weg zu finden, eine Entwicklungsumgebung mit Docker und Laravel zu erstellen.

Ich habe folgende Dockerdatei:

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 erfordert, dass Composer Composer dump-autoload aufruft, wenn mit der Datenbankmigration gearbeitet wird. Daher brauche ich den Composer im Docker-Container.

Ich habe es versucht:

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

Aber wenn ich anrufe

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

Es wirft den folgenden Fehler:

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"

Ich würde mich sehr über Ratschläge freuen, wie ich Composer zum PATH in meiner Dockerdatei hinzufügen kann oder was ich sonst noch tun kann, um diesen Fehler zu umgehen.

Danke für deine Unterstützung. Ebenfalls: Dies ist das Gitub-Repository, wenn Sie die Datei docker-compose.yml oder etwas anderes sehen müssen.

  • Muss das Rad neu erfunden werden? Warum nicht Out-of-the-Box-Lösungen für Docker, PHP und Laravel (wie Laradock das so ziemlich alles abdeckt, was Sie brauchen, und leicht konfigurierbar ist)?

    – d3jn

    20. Juli 2018 um 13:30 Uhr


  • Alternativ gibt es immer noch die Möglichkeit als Composer zu verwenden .phar als Teil des Repositorys eingecheckt.

    – Namoschek

    20. Juli 2018 um 13:31 Uhr

  • Sind Sie sicher, dass Ihr Container erfolgreich erstellt wurde? Dieses Skript macht Composer bereits ausführbar. 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 Das Problem liegt also wahrscheinlich nicht im Docker oder Composer selbst falsche Konfiguration oder ein Problem mit docker-compose

    – AlTak

    20. Juli 2018 um 13:57 Uhr

  • @AITak, danke für die Antwort, ich werde es überprüfen!

    – André

    21. Juli 2018 um 8:30 Uhr

  • @d3jn, dies ist das erste Mal, dass ich mit Docker arbeite, und ich möchte dieses Laravel + Docker-Wanderskelett nachbauen, um daraus zu lernen. Trotzdem danke für den Hinweis Laradock!

    – André

    21. Juli 2018 um 8:31 Uhr

Im Dockerfile:

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

  • Seien Sie sich dessen bewusst --from ist ziemlich neu und wird nicht in allen Umgebungen verfügbar sein.

    – Fuzzy76

    25. März 2020 um 9:39 Uhr

  • Beachten Sie, ob Sie Pakete in Ihrem haben composer.json die nur von der Quelle installiert werden kann, müssen Sie auch installieren git.

    – luukvhoudt

    30. Juni 2020 um 11:10 Uhr

  • Was ist mit dem xdebug?

    – FabianoLothor

    24. Juli 2021 um 5:03 Uhr

  • Wenn Sie eine bestimmte Version benötigen, funktioniert dies problemlos, tanken Sie. Ich benutze das COPY --from=composer:2.1.8 /usr/bin/composer /usr/local/bin/composer

    – YusufFidan

    4. Oktober 2021 um 17:40 Uhr


  • Das ist wirklich sauber, schön.

    – die Wildnis

    6. Oktober 2021 um 13:39 Uhr

Ich kann Composer installieren, indem ich diese Zeile zu meiner Test-Dockerdatei hinzufüge:

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

Hier ist die Dockerdatei:

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

Es funktioniert für mich, um zu testen, ob der Composer installiert ist, greife ich auf meine Container-Bash zu und führe Folgendes aus:

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

  • Gibt composer –version nicht nur die Ausgabe vom Host-Rechner zurück? Oder wo nennst du es?

    – Darius.V

    21. Oktober 2020 um 13:21 Uhr

  • Sie müssen das generierte Image mit ausführen docker run -dit my-image Befehl, danach müssen Sie ausführen docker exec -it container-id shund mit diesem Befehl können Sie auf das Containerterminal zugreifen, wenn Sie sich auf dem Containerterminal befinden, können Sie die ausführen composer --version Befehl, um zu überprüfen, ob dies auf Ihrem Container installiert ist

    – Brayan-Caldera

    21. Oktober 2020 um 21:17 Uhr


  • Da Composer 2.0 nicht mehr verfügbar ist und viele Projekte immer noch die 1.x-Version benötigen, können Sie auch –version für eine bestimmte Composer-Version als solche an das Installationsprogramm übergeben: RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer --version=1.10.22

    – Mihai MATEI

    28. Juni 2021 um 8:13 Uhr


  • Besser so bekommen: COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composeraus dieser Antwort

    – rkeet

    11. Juli 2021 um 7:05 Uhr

So mache ich es mit Laravel 8.4 im Jahr 2021, um es in CloudRun in Google Cloud bereitzustellen:

Dockerfile

#Get Composer
FROM composer:2.0 as vendor

WORKDIR /app

COPY database/ database/
COPY composer.json composer.json
COPY composer.lock composer.lock

RUN composer install \
    --no-interaction \
    --no-plugins \
    --no-scripts \
    --no-dev \
    --prefer-dist

COPY . .
RUN composer dump-autoload

// einige weitere benutzerdefinierte Schritte wie

FROM node:14.9 as frontend
...
FROM php:7.4-fpm
...

// Composer-Abhängigkeiten kopieren

# Copy Composer dependencies
COPY --from=vendor app/vendor/ ./vendor/
COPY . .

// Einige weitere benutzerdefinierte Schritte

...

Ende meiner Docker-Datei zum Starten der App mit gelöschtem optimiertem Cache

# Run Laravel commands
RUN php artisan optimize:clear

CMD php artisan serve --host=0.0.0.0 --port=8080

EXPOSE 8080

  • Beachten Sie, dass die Verwendung nicht empfohlen wird artisan serve für die Produktion.

    – HoseinGhanbari

    14. November 2021 um 8:38 Uhr

  • musste ich hinzufügen --ignore-platform-reqs da das Composer-Image nicht alle Anforderungen wie die PHP-Version hatte, die in meiner enthalten sind composer.json

    – Jerry

    7. Juli um 22:46 Uhr

Erstellen Sie eine ausführbare Datei Ihrer Composer-Datei mit

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

Wir haben im Grunde den gleichen Befehl, der mit dem Unterschied ausgeführt wird,

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

Alternativ sollten Sie den Pfad der Composer-Bin-Dateien zur Variablen $PATH hinzufügen.

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

Benutzer-Avatar
Pankaj Salunkhe

Ich möchte nur einen anderen Weg vorschlagen.

Dockerdatei:

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

Benutzer-Avatar
Leonel Kahameni

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"

1351610cookie-checkSo installieren Sie PHP Composer in einem Docker-Container

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy