PHP 7.1 Docker构建将无法使用pgsql

时间:2018-03-29 05:48:41

标签: docker php-7.1

我使用polinux / httpd:centos repo来运行Apache和PHP 7.1。构建似乎没问题。有一些与密钥相关的警告,但没有与php或pgsql相关的警告。构建成功完成,但是当我进入容器时,模块未列出(php -m)并且php.d中没有扩展配置文件。

我确认它多次列在Dockerfile中。 我可以在启动容器后手动安装php71-php-pgsql,但是我无法在不重新启动容器的情况下重启Apache。

我尝试将yum install php71-php-pgsql作为单独的RUN命令(除了原始版本)移动到Dockerfile的末尾,但它报告它已经安装了,但是当我进入容器时它没有在模块中列出,也没有配置,如上所述。

当我重建一个容器时,我停止并删除它,然后使用no-cache选项运行build。

我难过......

Dockerfile很长,但如果有帮助我可以发帖。

感谢。

更新:每个请求的Dockerfile ......

FROM polinux/httpd:centos

ENV \
    NVM_DIR="/usr/local/nvm" \
    NODE_VERSION="9.2.0" \
    GIT_VERSION="2.15.0" \
    PHP_VERSION="71"

ADD mariadb.repo /etc/yum.repos.d/mariadb.repo

RUN \
  rpm --rebuilddb && yum clean all && rm -rf /var/cache/yum && \
  yum update -y && \
  yum install -y \
  wget \
  patch \
  bzip2 \
  unzip \
  make \
  openssh-clients \
  git \
  MariaDB-client && \
  rpm -Uvh http://rpms.remirepo.net/enterprise/remi-release-7.rpm && \
  yum install -y \
  php${PHP_VERSION}-php \
  php${PHP_VERSION}-php-bcmath \
  php${PHP_VERSION}-php-cli \
  php${PHP_VERSION}-php-common \
  php${PHP_VERSION}-php-devel \
  php${PHP_VERSION}-php-fpm \
  php${PHP_VERSION}-php-gd \
  php${PHP_VERSION}-php-gmp \
  php${PHP_VERSION}-php-intl \
  php${PHP_VERSION}-php-json \
  php${PHP_VERSION}-php-mbstring \
  php${PHP_VERSION}-php-mcrypt \
  php${PHP_VERSION}-php-mysqlnd \
  php${PHP_VERSION}-php-pgsql \
  php${PHP_VERSION}-php-opcache \
  php${PHP_VERSION}-php-pdo \
  php${PHP_VERSION}-php-pear \
  php${PHP_VERSION}-php-process \
  php${PHP_VERSION}-php-pspell \
  php${PHP_VERSION}-php-xml \
  php${PHP_VERSION}-php-pecl-imagick \
  php${PHP_VERSION}-php-pecl-mysql \
  php${PHP_VERSION}-php-pecl-uploadprogress \
  php${PHP_VERSION}-php-pecl-uuid \
  php${PHP_VERSION}-php-pecl-memcache \
  php${PHP_VERSION}-php-pecl-memcached \
  php${PHP_VERSION}-php-pecl-redis \
  php${PHP_VERSION}-php-pecl-zip && \
  ln -sfF /opt/remi/php${PHP_VERSION}/enable /etc/profile.d/php${PHP_VERSION}-paths.sh && \
  ln -sfF /opt/remi/php${PHP_VERSION}/root/usr/bin/{pear,pecl,phar,php,php-cgi,php-config,phpize} /usr/local/bin/. && \
  mv -f /etc/opt/remi/php${PHP_VERSION}/php.ini /etc/php.ini && ln -s /etc/php.ini /etc/opt/remi/php${PHP_VERSION}/php.ini && \
  rm -rf /etc/php.d && mv /etc/opt/remi/php${PHP_VERSION}/php.d /etc/. && ln -s /etc/php.d /etc/opt/remi/php${PHP_VERSION}/php.d && \
  yum install -y \
    ImageMagick \
    GraphicsMagick \
    gcc \
    gcc-c++ \
    libffi-devel \
    libpng-devel \
    zlib-devel && \
  yum install -y ruby ruby-devel && \
  echo 'gem: --no-document' > /etc/gemrc && \
  gem update --system && \
  gem install bundler && \
  export PROFILE=/etc/profile.d/nvm.sh && touch $PROFILE && \
  curl -sSL https://raw.githubusercontent.com/creationix/nvm/v0.31.2/install.sh | bash && \
  source $NVM_DIR/nvm.sh && \
  nvm install $NODE_VERSION && \
  nvm alias default $NODE_VERSION && \
  nvm use default && \
  npm install -g \
  gulp \
    grunt-cli \
    bower \
    browser-sync && \
  echo -e "StrictHostKeyChecking no" >> /etc/ssh/ssh_config && \
  curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer && \
  chown apache /usr/local/bin/composer && composer --version && \
  yum clean all && rm -rf /tmp/yum* && \
  sed -i 's|SetHandler application/x-httpd-php|SetHandler "proxy:fcgi://127.0.0.1:9000"|g' /etc/httpd/conf.d/php${PHP_VERSION}-php.conf

ADD container-files /

ENV \
  NODE_PATH=$NVM_DIR/versions/node/v$NODE_VERSION/lib/node_modules \
  PATH=$NVM_DIR/versions/node/v$NODE_VERSION/bin:$PATH

RUN \
  mkdir -p /data/tmp/php && \
  chmod -R 777 /data/tmp

# Weird issue: For some reason pgsql is not installed above.  May be OoO...  
Manually installing worked, so adding here at the end.
RUN \
  yum install php71-php-pgsql -y

1 个答案:

答案 0 :(得分:0)

将此归结为缺乏经验...... 事实证明,这是我引用图像的方式的问题,首先是构建然后运行实例。我仍然不确定我完全理解,但我认为我正在运行基本容器而不是修改后的构建。

对于可能遇到类似问题的其他人,帮助我实现这一目标的2个命令是:

docker build --rm -t local/httpd-php71 .

......然后......

docker run \
  -d \
  --name httpd-php71 \
  --restart unless-stopped \
  --net dockersubnet \
  --volume /www:/var/www \
  local/httpd-php71

'local / httpd-php71'是我的本地/自定义版本。在我没有在构建命令中使用任何标记引用之前,我在运行命令中引用了'polinux / httpd:centos'(基数)。

感谢。