Docker在构build完图像后不安装composer依赖项

我使用php5.6-fpm映像构build了一个简单的dockerfile。 这个文件应该运行我的网站php代码并安装所有必需的依赖项。 问题是,PHP正在工作,但依赖像

composer install –working-dir = / var / www / html $ COMPOSER_ARGS

cp /var/www/html/config.inc.php.dist /var/www/html/config.inc.php

没有安装。

Dockerfile:

FROM php:5.6-fpm LABEL maintainer "karolis@pretendentas.lt" WORKDIR /var/www/html VOLUME /var/www/html EXPOSE 9000 COPY docker-entrypoint.sh /docker-entrypoint.sh RUN set -ex \ && apt-get update && apt-get install -y \ zip \ git \ libxml2-dev \ libjpeg-dev \ libpng12-dev \ && docker-php-ext-configure gd --with-png-dir=/usr/ --with-jpeg-dir=/usr/ \ && docker-php-ext-install -j$(nproc) bcmath gd mysqli opcache soap RUN mkdir -p /var/lib/php/session \ && mkdir -p /var/lib/php/wsdlcache \ && chown -R www-data:www-data /var/lib/php/session \ && chown -R www-data:www-data /var/lib/php/wsdlcache \ && chmod +x /docker-entrypoint.sh ENV GITHUB_TOKEN ******************** RUN set -ex \ && curl -sS https://getcomposer.org/installer | php -- \ --install-dir=/usr/bin \ --filename=composer \ && composer config -g github-oauth.github.com $GITHUB_TOKEN ENTRYPOINT ["/docker-entrypoint.sh"] 

docker-entrypoint.sh:

 #!/bin/bash set -e if [ -f var/www/html/docker/init.sh ]; then sleep 5 && echo "[info] Running /var/www/html/init.sh script" && sh /var/www/html/init.sh & fi docker-php-entrypoint php-fpm 

init.sh:

 #!/bin/bash if [ -f /var/www/html/composer.json ] && [ ! -d /var/www/html/vendor ]; then echo "[info] Composer install" composer install --working-dir=/var/www/html $COMPOSER_ARGS fi if [ ! -f /var/www/html/config.inc.php ]; then echo "[info] Copy default config" cp /var/www/html/config.inc.php.dist /var/www/html/config.inc.php fi 

这是来自docker-compose文件的php图片片段:

 php: image: pretendentas/php5.6-test ports: - "9000:9000" volumes: - .:/var/www/html - ./docker/php/php.ini:/usr/local/etc/php/php.ini:ro working_dir: /var/www/html restart: always depends_on: - db 

我想你问错了path来执行文件。

dockerfile

 COPY init.sh /var/www/html/init.sh 

entrypoint.sh

 if [ -f var/wwww/html/docker/init.sh ]; 

修正这里的错别字:

 if [ -f var/wwww/html/docker/init.sh ]; 

至:

 if [ -f /var/www/html/docker/init.sh ]; 

但是,考虑到init.sh的COPY正在被卷。 所以在entrypoint.sh引用init.sh的正确path。 我假设init.sh在项目的根目录下,所以它位于卷的根目录: /var/www/html

 if [ -f /var/www/html/init.sh ]; then sleep 5 && echo "[info] Running /var/www/html/init.sh script " && sh /var/www/html/init.sh & fi