簡體   English   中英

如何在 php 容器中從 dockerfile 運行 composer install

[英]How run composer install from dockerfile in php container

美好的一天,我在 Dockerfile 中設置了 php 容器

我正在嘗試使用此命令運行 composer install

WORKDIR '/app'
RUN curl -sS https://getcomposer.org/installer | \
            php -- --install-dir=/usr/bin/ --filename=composer
        CMD bash -c "composer install && php artisan serve --host 0.0.0.0 --port 80"
    EXPOSE 80
    EXPOSE 22
    CMD ["php-fpm"]

但是我沒有收到錯誤消息,並且由於 composer install 沒有工作而無法運行應用程序。只有 laravel 的白屏,這意味着沒有安裝 composer。

如果我在 docker compose up 之后運行

docker run -it --rm -v $(pwd):/app composer/composer install

我收到一個錯誤 Composer 在 /app 中找不到 composer.json 文件要初始化一個項目,請按照https://getcomposer.org/ “入門”部分中的描述創建一個 composer.json 文件

如果我嘗試復制項目目錄,我會收到一個錯誤

COPY /var/www/docker/project /app

錯誤:服務 'php' 無法構建:復制失敗:stat /var/lib/docker/tmp/docker-builder091462376/var/www/docker/project:沒有這樣的文件或目錄雖然我在 docker 中的 php 容器中有卷-compose.yml

volumes:
            - ${APP_PATH_HOST}:${APP_PATH_CONTAINER}
            - /app/vendor/

這是我的 docker-compose.yml

version: '2'
services:
    nginx:
     image: nginx:latest
     container_name: "${PROJECT_NAME}_nginx"
     environment:
       NGINX_STATIC_OPEN_FILE_CACHE: "off"
       NGINX_ERROR_LOG_LEVEL: debug
       NGINX_BACKEND_HOST: php
       NGINX_VHOST_PRESET: php
       NGINX_SERVER_ROOT: /app/public
     ports:
        - "80:80"
        - "443:443"
     volumes:
        - ./hosts:/etc/nginx/conf.d
        - ${APP_PATH_HOST}:${APP_PATH_CONTAINER}
        - ./logs:/var/log/nginx
     links:
        - php

     labels:
       - 'traefik.backend=nginx'
       - 'traefik.port=80'
       - 'traefik.frontend.rule=Host:${PROJECT_BASE_URL}'  
    php:
        build: ./images/php
        links:
            - mariadb
        #command: bash -c 'cd /app composer install'    
        volumes:
            - ${APP_PATH_HOST}:${APP_PATH_CONTAINER}
            - /app/vendor/

    mariadb:
     image: wodby/mariadb:$MARIADB_TAG
     container_name: "${PROJECT_NAME}_mariadb"
     stop_grace_period: 30s
     environment:
      MYSQL_ROOT_PASSWORD: $DB_ROOT_PASSWORD
      MYSQL_DATABASE: $DB_NAME
      MYSQL_USER: $DB_USER
      MYSQL_PASSWORD: $DB_PASSWORD

    pma:
     image: phpmyadmin/phpmyadmin
     container_name: "${PROJECT_NAME}_pma"
     ports:
        - "9000:80"
     environment:
       PMA_HOST: $DB_HOST
       PMA_USER: $DB_USER
       PMA_PASSWORD: $DB_PASSWORD
       PHP_UPLOAD_MAX_FILESIZE: 1G
       PHP_MAX_INPUT_VARS: 1G
     labels:
      - 'traefik.backend=pma'
      - 'traefik.port=80'
      - 'traefik.frontend.rule=Host:pma.${PROJECT_BASE_URL}'

這里完全是Dockerfile

FROM php:7.2-fpm-alpine3.6
WORKDIR '/app'
RUN apk update && apk upgrade\
    && apk add --no-cache curl libbz2 php7-bz2 php7-pdo php7-pgsql php7-bcmath php7-zmq php7-curl bash php7-pear php7-imagick openssh imap-dev\
    libtool \
    postgresql-dev \
    libpng-dev \
    imagemagick-c++ \
    imagemagick-dev \
    libmcrypt-dev \
    libxml2-dev \
    yaml-dev \
    bzip2 \
    aspell-dev \
    autoconf \
    build-base \
    linux-headers \
    libaio-dev \
    zlib-dev \
    git \
    subversion \
    freetype-dev \
    libjpeg-turbo-dev \
    libmcrypt-dev \
    bzip2-dev \
    libstdc++ \
    libxslt-dev \
    openldap-dev \
    hiredis-dev \
    make \
    unzip \
    ffmpeg \
    wget
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
RUN docker-php-ext-configure imap --with-imap --with-imap-ssl \
  && docker-php-ext-install -j 4 imap 


RUN docker-php-ext-install gd bcmath zip bz2 pdo pdo_mysql simplexml opcache sockets mbstring pcntl xsl pspell
RUN docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ 
RUN pecl install imagick
RUN docker-php-ext-enable imagick 
RUN pecl install xdebug
RUN wget http://xdebug.org/files/xdebug-2.6.1.tgz
RUN tar -xvzf xdebug-2.6.1.tgz
RUN cd xdebug-2.6.1 \
    && phpize \
    && ./configure --enable-xdebug \
    && make \
    && make install \
    && cp modules/xdebug.so /usr/local/lib/php/extensions/no-debug-non-zts-20170718 \
    && echo 'zend_extension = /usr/local/lib/php/extensions/no-debug-non-zts-20170718/xdebug.so' >> /usr/local/etc/php/php.ini \
    && echo 'zend_extension = /usr/local/lib/php/extensions/no-debug-non-zts-20170718/xdebug.so' >> /etc/php7/php.ini \
    && echo 'xdebug.remote_enable=true' >> /etc/php7/php.ini \
    && echo 'xdebug.remote_host=127.0.0.1' >> /etc/php7/php.ini \
    && echo 'xdebug.remote_port=9000' >> /etc/php7/php.ini \
    && echo 'xdebug.remote_handler=dbgp' >> /etc/php7/php.ini \
    && echo 'xdebug.max_nesting_level=512' >> /etc/php7/php.ini

ENV COMPOSER_ALLOW_SUPERUSER 1

RUN echo "Install ZeroMQ library and PHP extension"
RUN apk add --update autoconf gcc libzmq zeromq-dev zeromq coreutils build-base
RUN pecl install zmq-beta \
  && docker-php-ext-enable zmq
#COPY ./project /app
RUN curl -sS https://getcomposer.org/installer | \
    php -- --install-dir=/usr/bin/ --filename=composer
#RUN "composer install"


EXPOSE 80

EXPOSE 22
#CMD php artisan serve --host=0.0.0.0 --port=80
#CMD php artisan migrate --seed

CMD ["php-fpm"]
USER root
copy run.sh /run.sh
RUN chmod +x /run.sh  
RUN ls
#RUN ["chmod", "+x", "/run.sh"]
COPY ./././project app/
RUN composer install --no-dev --no-interaction -o

CMD ["/run.sh"]

看來您正在混合使用 PHP-FPM 和獨立的 PHP 服務器。 而是將artisan serve轉移到 CMD。 另外,你只能有一個CMD ,它是容器啟動時需要執行的命令。 為了在構建容器時執行其他命令,需要使用RUN命令。 所以你的 Dockerfile 可以是這樣的:

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

RUN "composer install"
EXPOSE 80
EXPOSE 22
CMD "php artisan serve --host 0.0.0.0 --port 80"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM