2017-12-27 13 views
1

3 주 전부터 사용하고있는 php5.6 + apache 이미지가 있습니다.이 이미지를 만들 때 Dockerfile을 작성했습니다.Dockerfile - RUN apt-get install -y php5-MODULES가 더 이상 작동하지 않습니다. '설치 후보자 없음'. 그것을 해결하는 방법?

내 이미지를 시작하려면 base image을 사용하고 있습니다. php.ini에서 일부 변수를 변경해야 할 때까지 모든 것이 잘 작동했습니다.

지금 다시 나는이 오류가 무엇입니까 이미지를 빌드 할 때 :

Step 5/173 : RUN apt-get install -y php5-common 
---> Running in 8114082e9931 
Reading package lists... 
Building dependency tree... 
Reading state information... 
Package php5-common is not available, but is referred to by another package. 
This may mean that the package is missing, has been obsoleted, or 
is only available from another source 

E: Package 'php5-common' has no installation candidate 
The command '/bin/sh -c apt-get install -y php5-common' returned a non-zero code: 100 

그것이 내가 설치하려고 각 PHP 모듈을위한 일이 될 것으로 보인다.

다음은 Dockerfile의 일부입니다

FROM php:5-apache 

## Update apt-get 
RUN apt-get update 

RUN php -m  
RUN php -v 


RUN apt-get install -y php5-common 
RUN apt-get install -y php-calendar 
RUN docker-php-ext-install bcmath 
RUN apt-get install -y php5-mhash 
RUN apt-get install -y php5-intl 
RUN cp /etc/php5/mods-available/intl.ini /usr/local/etc/php/conf.d && ln -s /usr/lib/php5/20131226/intl.so /usr/local/lib/php/extensions/no-debug-non-zts-20131226/intl.so 
RUN apt-get install -y php5-mcrypt 
RUN cp /etc/php5/mods-available/mcrypt.ini /usr/local/etc/php/conf.d && ln -s /usr/lib/php5/20131226/mcrypt.so /usr/local/lib/php/extensions/no-debug-non-zts-20131226/mcrypt.so 
RUN apt-get install -y php5-redis 
RUN cp /etc/php5/mods-available/redis.ini /usr/local/etc/php/conf.d && ln -s /usr/lib/php5/20131226/redis.so /usr/local/lib/php/extensions/no-debug-non-zts-20131226/redis.so 
RUN apt-get install -y php5-mysql 
RUN cp /etc/php5/mods-available/mysql.ini /usr/local/etc/php/conf.d && ln -s /usr/lib/php5/20131226/mysql.so /usr/local/lib/php/extensions/no-debug-non-zts-20131226/mysql.so 
RUN cp /etc/php5/mods-available/opcache.ini /usr/local/etc/php/conf.d 
RUN apt-get install -y php5-gd 
RUN cp /etc/php5/mods-available/gd.ini /usr/local/etc/php/conf.d && ln -s /usr/lib/php5/20131226/gd.so /usr/local/lib/php/extensions/no-debug-non-zts-20131226/gd.so 
RUN apt-get install -y php5-gdcm 
RUN cp /etc/php5/mods-available/gdcm.ini /usr/local/etc/php/conf.d && ln -s /usr/lib/php5/20131226/gdcm.so /usr/local/lib/php/extensions/no-debug-non-zts-20131226/gdcm.so 
RUN apt-get install -y php5-vtkgdcm 
RUN cp /etc/php5/mods-available/vtkgdcm.ini /usr/local/etc/php/conf.d && ln -s /usr/lib/php5/20131226/vtkgdcm.so /usr/local/lib/php/extensions/no-debug-non-zts-20131226/vtkgdcm.so 
RUN apt-get install -y php5-ldap 
RUN cp /etc/php5/mods-available/ldap.ini /usr/local/etc/php/conf.d && ln -s /usr/lib/php5/20131226/ldap.so /usr/local/lib/php/extensions/no-debug-non-zts-20131226/ldap.so 
RUN apt-get install -y php5-xsl 
RUN cp /etc/php5/mods-available/xsl.ini /usr/local/etc/php/conf.d && ln -s /usr/lib/php5/20131226/xsl.so /usr/local/lib/php/extensions/no-debug-non-zts-20131226/xsl.so 
RUN apt-get install -y php5-tidy 
RUN cp /etc/php5/mods-available/tidy.ini /usr/local/etc/php/conf.d && ln -s /usr/lib/php5/20131226/tidy.so /usr/local/lib/php/extensions/no-debug-non-zts-20131226/tidy.so 
RUN apt-get install -y php5-xmlrpc 
RUN cp /etc/php5/mods-available/xmlrpc.ini /usr/local/etc/php/conf.d && ln -s /usr/lib/php5/20131226/xmlrpc.so /usr/local/lib/php/extensions/no-debug-non-zts-20131226/xmlrpc.so 
RUN apt-get install -y php5-pgsql 
RUN cp /etc/php5/mods-available/pgsql.ini /usr/local/etc/php/conf.d && ln -s /usr/lib/php5/20131226/pgsql.so /usr/local/lib/php/extensions/no-debug-non-zts-20131226/pgsql.so 
RUN cp /etc/php5/mods-available/mysqli.ini /usr/local/etc/php/conf.d && ln -s /usr/lib/php5/20131226/mysqli.so /usr/local/lib/php/extensions/no-debug-non-zts-20131226/mysqli.so 
RUN cp /etc/php5/mods-available/pdo.ini /usr/local/etc/php/conf.d && ln -s /usr/lib/php5/20131226/pdo.so /usr/local/lib/php/extensions/no-debug-non-zts-20131226/pdo.so 
RUN cp /etc/php5/mods-available/pdo_mysql.ini /usr/local/etc/php/conf.d && ln -s /usr/lib/php5/20131226/pdo_mysql.so /usr/local/lib/php/extensions/no-debug-non-zts-20131226/pdo_mysql.so 
RUN cp /etc/php5/mods-available/pdo_pgsql.ini /usr/local/etc/php/conf.d && ln -s /usr/lib/php5/20131226/pdo_pgsql.so /usr/local/lib/php/extensions/no-debug-non-zts-20131226/pdo_pgsql.so 
RUN cp /etc/php5/mods-available/readline.ini /usr/local/etc/php/conf.d && ln -s /usr/lib/php5/20131226/readline.so /usr/local/lib/php/extensions/no-debug-non-zts-20131226/readline.so 

#COPYING__php.ini 
RUN cp /etc/php5/cli/php.ini /usr/local/etc/php/ 
RUN ls -l /usr/local/etc/ 


## Setting up php.ini varaibles 
RUN grep '^post_max_size' /usr/local/etc/php/php.ini 
RUN sed -i 's,^post_max_size =.*$,post_max_size = 2048M,' /usr/local/etc/php/php.ini 
RUN grep '^post_max_size' /usr/local/etc/php/php.ini 

RUN grep '^upload_max_filesize' /usr/local/etc/php/php.ini 
RUN sed -i 's,^upload_max_filesize =.*$,upload_max_filesize = 2048M,' /usr/local/etc/php/php.ini 
RUN grep '^upload_max_filesize' /usr/local/etc/php/php.ini 

... 

기본적으로 2 주 전에 작업 한 모든 모듈에 대한 has no installation candidate 오류입니다.

어떻게 해결할 수 있습니까?

UPDATE는 문제가 공식 PHP 컨테이너 영상이 쉽게하기 위해 헬퍼와 함께 제공이 POST

+0

설치를 시도 할 때'apt-get update '를 잊어 버리기 때문에 RUN을 그룹화하십시오 – user2915097

답변

1

참조 따르십시오. 이 예는 the PHP repository on Docker에서 직접 가져온 것입니다.

당신이 당신의 Dockerfile에 다음을 추가 할 mcyrpt 핵심 확장을 설치하려면 :

RUN docker-php-ext-install -j$(nproc) mcrypt 

일부 확장 (당신이 당신의 컨테이너를 빌드 할 때 확장이 컴파일되어 있기 때문에) 라이브러리가 시스템에 존재해야합니다. 이 예에서는 모든 명령이 함께 묶여 있습니다. 은 각각 RUN 일 수 있습니다. 당신이 pecl install는 해당 .ini 파일을 추가 할 수 docker-php-ext-enable를 사용하여 다음 설치하고 처리 할 수 ​​있습니다 redis 또는 memcached 같은 PECL 확장에 대한

RUN apt-get update && apt-get install -y libfreetype6-dev \ 
     libjpeg62-turbo-dev \ 
     libmcrypt-dev \ 
     libpng-dev 
    && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \ 
    && docker-php-ext-install -j$(nproc) gd 

. 위의 gd 예제와 달리 일부 PECL 확장은 자체 종속성이 있으므로 설치하기 전에 apt-get install -y ...을 추가해야합니다. 모두 함께 묶는

RUN pecl install redis-3.1.0 && docker-php-ext-enable redis 

, 그것은 gd, redismcrypt을 추가하려면 다음과 같이 보일 수 있습니다. 당신이 Dockerfile 보면

FROM php:5-apache 

RUN apt-get update && apt-get install -y libfreetype6-dev \ 
     libjpeg62-turbo-dev \ 
     libmcrypt-dev \ 
     libpng-dev 
    && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \ 
    && docker-php-ext-install -j$(nproc) gd 
RUN docker-php-ext-install -j$(nproc) mcrypt 
RUN pecl install redis-3.1.0 && docker-php-ext-enable redis 

RUN php -m 
0

당신이 link을 제공, 이러한 선이 : PHP 패키지 Pin-Priority에 대한 -1

# prevent Debian's PHP packages from being installed 
# https://github.com/docker-library/php/pull/542 
RUN set -eux; \ 
    { \ 
     echo 'Package: php*'; \ 
     echo 'Pin: release *'; \ 
     echo 'Pin-Priority: -1'; \ 
    } > /etc/apt/preferences.d/no-debian-php 

성향이 패키지를 설치하지 않는 시스템을 말하고있다. 그리고 풀 요청은 왜 https://github.com/docker-library/php/pull/542인지 설명합니다.

문제를 해결하려면 빌드 docker-php-ext-install 명령을 사용하여 PHP 패키지를 설치해야합니다.

FROM php:5-apache 

RUN apt-get update && apt-get install -y \ 
     libfreetype6-dev \ 
     libjpeg62-turbo-dev \ 
     libmcrypt-dev \ 
     libpng-dev \ 
    && docker-php-ext-install -j$(nproc) iconv mcrypt \ 
    && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \ 
    && docker-php-ext-install -j$(nproc) gd 

행운을 빕니다 : 여기에 자신의 공식 페이지 https://hub.docker.com/_/php/의 예입니다.