Docker在构建映像后没有安装composer依赖项

时间:2017-06-13 20:17:51

标签: docker docker-compose dockerfile

我使用php5.6-fpm图像构建了一个简单的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

2 个答案:

答案 0 :(得分:1)

我认为你问错误的路径来执行文件。

dockerfile

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

entrypoint.sh

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

答案 1 :(得分:1)

修复拼写错误:

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

要:

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

但是,请考虑到init.sh的COPY被卷覆盖。因此,在entrypoint.sh中,请参阅init.sh的正确路径。我假设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