【问题标题】:PHP 7.1 Docker build will not compile with pgsqlPHP 7.1 Docker build 无法使用 pgsql 编译
【发布时间】:2018-03-29 05:48:40
【问题描述】:

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

我多次验证它已在 Dockerfile 中列出。 我可以在启动容器后手动安装 php71-php-pgsql,但是如果不重新启动容器就无法重新启动 Apache。

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

当我重建一个容器时,我会停止并删除它,然后使用 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

【问题讨论】:

  • 请将您的Dockerfile 添加到问题中。
  • 这很奇怪,但是在我的 ubuntu 16.04 主机上没有最后一个 RUN 层,你的 Dockerfile 工作得很好,docker 版本为 18.03.0-ce: pastebin.com/AEpwenQV
  • 感谢 Nickolay,当您 ssh 进入容器时,php-pgsql 是否安装正确?我正在使用 Docker 版本 17.12.0-ce,但这有什么关系呢?

标签: docker php-7.1


【解决方案1】:

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

对于可能遇到类似问题的其他人,帮助我完成这项工作的 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'。

谢谢。

【讨论】:

    猜你喜欢
    • 2017-11-29
    • 1970-01-01
    • 2019-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-09
    • 2020-07-09
    • 1970-01-01
    相关资源
    最近更新 更多