Composer install with dockerfile

拈花ヽ惹草 提交于 2021-01-27 17:07:44

问题


I'm pretty new with docker, I try to automatically execute composer install within my Dockerfile but it seems that I can't cd into my application while installing, what's wrong? Or maybe there is another better way to do that?

my docker-compose.yml

version: "3.1"
services:

    app:
      image: nginx:alpine
      container_name: app
      working_dir: /application
      volumes:
          - ./Projects/app:/application/app
          - ./Docker/nginx/app.conf:/etc/nginx/conf.d/app.conf
      ports:
          - "8080:8080"

    php-fpm-app:
      build: Docker/php-fpm-app
      container_name: php-fpm-app
      working_dir: /application
      volumes:
          - ./Projects:/application
          - ./Docker/php-fpm-app/php-ini-overrides.ini:/etc/php/7.2/fpm/conf.d/99-overrides.ini

my Dockerfile

FROM phpdockerio/php72-fpm:latest
WORKDIR "/application"

# Fix debconf warnings upon build
ARG DEBIAN_FRONTEND=noninteractive

RUN mkdir -p /var/www/.composer \
    && chown -R www-data:www-data /var/www/.composer

USER www-data

RUN cd /application/app; composer install

The output after I run this command:

docker-compose up -d

Step 6/6 : RUN cd /application/app; composer install
 ---> Running in ac53e653af46
/bin/sh: 1: cd: can't cd to /application/app
Composer could not find a composer.json file in /application
To initialize a project, please create a composer.json file as described in the https://getcomposer.org/ "Getting Started" section
ERROR: Service 'php-fpm-app' failed to build: The command '/bin/sh -c cd /application/app; composer install' returned a non-zero code: 1

If I try to remove the last line from my Dockerfile, once it's up and running if I run this command:

docker-compose exec --user www-data php-fpm-app bash -c 'cd /application/app && composer install'

It works, I don't understand why I can't do this with my Dockerfile.

=========================== Finally I find a way to execute a script but I don't see the output, so if the script last for many secondes/minutes I won't know when it's done.

ADD ./setup.sh /setup.sh
RUN chmod +x /setup.sh
CMD ["sh", "/setup.sh"]

I decided to execute this script manually once all it's up and running

sh ./setup.sh

回答1:


You should not run composer install in Dockerfile. It will fail because you have not created/synced volume from the local to container yet. Thus all files including composer.json is not placed under /var/www/html.

What you can do is to add 1 line (command) into your docker-compose.yaml file inside the service eg.

services:
  api-php-fpm:
    build: ./docker/php-fpm
    command: sh -c "composer install"



回答2:


Referencing the Documentation for Dockerfiles you need to edit your Dockerfile.

it should be:

WORKDIR /application/app
RUN composer install

Does this fix your problem?



来源:https://stackoverflow.com/questions/52185927/composer-install-with-dockerfile

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!