@Lanserot
как еж в тумане

Как запустить composer в docker?

Доброго времени суток. Бьют я тут с Docker. Прошу помочь.

Есть такой Dockerfile:
FROM composer as prepare
WORKDIR /app
COPY . ./app/
RUN composer install

FROM php as runtime
COPY --from=prepare /app/ /app/
WORKDIR /app


пробовал так же напрямую из файла для php сделать composer install

Но каждый раз вижу ошибку
#0 0.541 Composer could not find a composer.json file in /app
Composer не видит json

6494b34dd7e12542179312.png

Сам файл php где я запускаю php (в нем сейчас нет скачивания компонентов)
# Set master image
FROM php:7.4-fpm-alpine

# Set working directory
WORKDIR /var/www/html

# Install Additional dependencies
RUN apk update --no-cache \
    build-base shadow vim curl \
    php7 \
    php7-fpm \
    php7-common \
    php7-pdo \
    php7-pdo_mysql \
    php7-mysqli \
    php7-mcrypt \
    php7-mbstring \
    php7-xml \
    php7-openssl \
    php7-json \
    php7-phar \
    php7-zip \
    php7-gd \
    php7-dom \
    php7-session \
    php7-zlib

# Add and Enable PHP-PDO Extenstions
RUN docker-php-ext-install pdo pdo_mysql mysqli
RUN docker-php-ext-enable pdo_mysql

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

RUN touch /.dockerenv

# Remove Cache
RUN rm -rf /var/cache/apk/*

# Add UID '1000' to www-data
# RUN usermod -u 1000 www-data

# Copy existing application directory permissions
COPY --chown=www-data:www-data . /var/www/html

# Change current user to www
USER www-data

# Expose port 9000 and start php-fpm server
EXPOSE 9000
CMD ["php-fpm", "composer install"]


С docker только знакомлюсь, прошу понимания)
  • Вопрос задан
  • 1813 просмотров
Решения вопроса 1
karabanov
@karabanov Куратор тега Docker
Системный администратор
Директория app находится на два уровня выше директории php в которой размещён Dockerfile - поменяй путь в директиве COPY
И WORKDIR /app создаёт директорию и делает её текущей, так что должно быть COPY ../../app .

PS
Никогда не используй Alpine образы ни для чего - этот дистрибутив оптимизирован для встраевыемых устройств с единицами мегабайт оперативной памяти и процессором с одним ядром, там вместо libc использован суррогат musl с неэффективным на б̀ольших объёмах памяти аллокатором, к тому же она не так сильно распростронена, как libc, что увеличивает вероятность столкнуться с чем нибудь вроде segmentation fault. К тому же часть пакетов в собранном виде отсутствует из-за чего во время установки происходит их сборка, что занимает значительное время, да и образ в итоге получается очень большим (компилятор то никто не умеет настраивать)

Используй debian-slim и PHP устанавливай из Sury репозитория - установка произойдёт очень быстро, а итоговый образ будет компактным (если, конечно, не забывать стирать списки пакетов и кеши на том же слое, где они были созданы)

PPS
# Remove Cache
RUN rm -rf /var/cache/apk/*

Удалять что либо на следующем слое бесполезно - там Copy on Write файловай система и всё что было на предыдущем слое создано там и останется
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы