nepster-web
@nepster-web

Как сделать composer install внутри docker контейнера?

Столкнулся с проблемой:
Мне нужно при билде подготовить готовое окружение и соответственно нужна команда composer install.

Я использую docker compose:
...   
php-bundle:
        container_name: php_bundle
        command: top -b
        build: ./docker/php-bundle
        depends_on:
            - "php"
        working_dir: /www
        volumes:
            - ./www:/www
        networks:
            client:
                ipv4_address: 192.168.110.119
...


И Dockerfile выглядит так:
# https://hub.docker.com/_/php/
# PHP7-CLI
FROM php:7.1-cli

WORKDIR /www


RUN apt-get update -qq \
    && apt-get install -qy --no-install-recommends \
        git \
        openssl \
        librecode0 \
        uuid-dev \
        libmagickwand-dev \
        libsasl2-dev \
        imagemagick \
        libmagickwand-dev \
        libmagickcore-dev \
        libsqlite3-0 \
        libxml2


RUN apt-get update -qq \
    && apt-get install -qy --no-install-recommends \
        autoconf \
        file \
        g++ \
        gcc \
        libc-dev \
        make \
        cmake \
        curl \
        pkg-config \
        libtool \
        tar \
        libmcrypt-dev \
        libpng-dev \
        zip \
        unzip \
        wget


RUN mkdir /var/log/php


RUN apt-get install -y libpq-dev \
    && docker-php-ext-configure pgsql -with-pgsql=/usr/local/pgsql


RUN docker-php-ext-install \
        gd \
        mcrypt \
        mysqli \
        pdo \
        pdo_pgsql \
        pgsql \
        pdo_mysql \
        mbstring \
        tokenizer \
        opcache \
        exif \
        zip

# Install composer
RUN curl -sS https://getcomposer.org/installer | php -- \
        --filename=composer \
        --install-dir=/usr/local/bin && \
        echo "alias composer='composer'" >> /root/.bashrc && \
        composer


# Install phpunit
RUN wget https://phar.phpunit.de/phpunit-6.0.phar && \
        chmod +x phpunit-6.0.phar && \
        mv phpunit-6.0.phar /usr/local/bin/phpunit


# Install codecept
RUN wget http://codeception.com/codecept.phar && \
        chmod +x codecept.phar && \
        mv codecept.phar /usr/local/bin/codecept

RUN composer install --prefer-source --no-interaction


При билде падает с ошибкой:
Do not run Composer as root/super user! See https://getcomposer.org/root for details
Composer could not find a composer.json file in /www
To initialize a project, please create a composer.json file as described in the https://getcomposer.org/ "Getting Started" section


Как я понял, волюм прокидывается после билда и на момент выполнения установки композера папка www пустая.
Подскажите, пожалуйста, как решить данную проблему ?
  • Вопрос задан
  • 27152 просмотра
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега PHP
COPY ./%относительный путь от Dockerfile%/composer.json /www/composer.json
RUN composer install --prefer-source --no-interaction
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
samizdam
@samizdam
Вы можете посмотреть рабочие примеры использования composer в docker в настоящих проектах. на github.
Моих например:
https://github.com/FreeElephants/rest-auth/blob/ma...
https://github.com/FreeElephants/thruway-in-docker...
Ответ написан
Комментировать
PQR
@PQR
Чтобы composer не ругался на root/super user, нужно установить переменную окружения
ENV COMPOSER_ALLOW_SUPERUSER 1
https://getcomposer.org/doc/03-cli.md#composer-all...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы