Как установить php зависимости composer в Docker из под Jenkins?

Jenkins тянет с репозитория файлы и запускает компиляцию докера.
Есть контейнер Docker С установленным php:7.3-fpm так:
fpm.dockerfile:
FROM php:7.3-fpm

COPY ./server/php.ini /usr/local/etc/php/conf.d/custom.ini

WORKDIR /var/www/project/

# Install dependencies
RUN apt-get update \
    && docker-php-ext-install pdo pdo_mysql

# Install dependencies
RUN apt-get install -y \
    libzip-dev \
    zip \
    unzip \
    git \
    curl

# Clear cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/*

# Install extensions
RUN docker-php-ext-install pdo_mysql mbstring zip exif pcntl

#RUN pecl install -o -f redis \
    #&&  rm -rf /tmp/pear \
    #&&  docker-php-ext-enable redis

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

# Add user for laravel application
RUN groupadd -g 1000 www
RUN useradd -u 1000 -ms /bin/bash -g www www

# Copy existing application directory contents
COPY ./client/ /var/www/project/
COPY ./client/.env.example /var/www/project/.env

RUN cd /var/www/project/ && composer install --prefer-source --no-interaction


Всё запускается, зависимости качаются, в jenkins ясная погода. Но сервер возвращает ошибку:
Warning: require(/var/www/project/public/../vendor/autoload.php): failed to open stream: No such file or directory in /var/www/project/public/index.php on line 33

Fatal error: require(): Failed opening required '/var/www/project/public/../vendor/autoload.php' (include_path='.:/usr/local/lib/php') in /var/www/project/public/index.php on line 33


Переходи в контейнер php:7.3-fpm и смотрим какие файлы там:
docker exec -ti devtest1_fpm_1 /bin/sh
cd /var/www/project/ && ls -la

drwxr-xr-x 11  111  113   4096 Mar  5 14:10 .
drwxr-xr-x  1 root root   4096 Mar  6 07:58 ..
-rw-r--r--  1  111  113    213 Mar  5 14:10 .editorconfig
-rw-r--r--  1  111  113    726 Mar  5 14:10 .env.example
-rw-r--r--  1  111  113    111 Mar  5 14:10 .gitattributes
-rw-r--r--  1  111  113    163 Mar  5 14:10 .gitignore
-rw-r--r--  1  111  113    174 Mar  5 14:10 .styleci.yml
drwxr-xr-x  6  111  113   4096 Mar  5 14:10 app
-rw-r--r--  1  111  113   1686 Mar  5 14:10 artisan
drwxr-xr-x  3  111  113   4096 Mar  5 14:10 bootstrap
-rw-r--r--  1  111  113   1581 Mar  5 14:10 composer.json
-rw-r--r--  1  111  113 170974 Mar  5 14:10 composer.lock
drwxr-xr-x  2  111  113   4096 Mar  5 14:10 config
drwxr-xr-x  5  111  113   4096 Mar  5 14:10 database
-rw-r--r--  1  111  113 433212 Mar  5 14:10 package-lock.json
-rw-r--r--  1  111  113   1126 Mar  5 14:10 package.json
-rw-r--r--  1  111  113   1156 Mar  5 14:10 phpunit.xml
drwxr-xr-x  4  111  113   4096 Mar  6 06:24 public
-rw-r--r--  1  111  113   4198 Mar  5 14:10 readme.md
drwxr-xr-x  6  111  113   4096 Mar  5 14:10 resources
drwxr-xr-x  2  111  113   4096 Mar  5 14:10 routes
-rw-r--r--  1  111  113    563 Mar  5 14:10 server.php
drwxr-xr-x  5  111  113   4096 Mar  5 14:10 storage
drwxr-xr-x  4  111  113   4096 Mar  5 14:10 tests
-rw-r--r--  1  111  113    538 Mar  5 14:10 webpack.mix.js


Но увы папки vendor, нет. Куда же установились зависимости ?

Причём файлы же существуют ! Но в контейнер докера не попадают !
Step 13/14 : RUN cd /var/www/project/ && composer install --prefer-source --no-interaction
 ---> Using cache
 ---> 4c7460730118
Step 14/14 : RUN find / -name autoload.php
 ---> Running in d5c359699292
/var/www/project/vendor/opis/closure/autoload.php
/var/www/project/vendor/autoload.php
/var/www/project/vendor/fzaninotto/faker/src/autoload.php
Removing intermediate container d5c359699292
 ---> ff3bfdbf7010


PS. на всякий случай.
docker-compose.yml
version: "3.3"

services:
  nginx:
    build:
      context: .
      dockerfile: server/nginx.dockerfile
    ports:
      - 80:80
    links:
      - fpm
    volumes:
      - ./client/:/var/www/project/

  fpm:
    build:
      context: .
      dockerfile: server/fpm.dockerfile
    volumes:
      - ./client/:/var/www/project/
      - ./server/php.ini:/usr/local/etc/php/conf.d/custom.ini
    links:
      - mysql

  mysql:
    image: mysql:5.7
    ports:
      - 33061:3306
    environment:
      - MYSQL_ROOT_PASSWORD=mysql
      - MYSQL_DATABSE=project
  • Вопрос задан
  • 904 просмотра
Решения вопроса 1
@vitaly_il1
DevOps Consulting
Добавьте

RUN cd /var/www/project/ && composer install --prefer-source --no-interaction
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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