みずりゅの自由帳

主に参加したイベントやソフトウェア技術/開発について記録しています

PHP環境をDockerで作ろうとしてpeclで「No releases available for package "pecl.php.net/grpc"」エラーになったのはProxyが原因だった

タイトルで結論が出ているんですけどね。
Dockerファイル内で実施していたapt-getが問題なく動いていたので、peclの通信がProxyにブロックされているとはすぐに思いつけませんでした。

前提

Proxy環境配下で動いているCentOS 7.4上で、Dockerを利用してPHPの実行環境を作ろうとしました。ホストOSになるCentOS上にはPHPの環境は構築しておらず、Dockerで構築するPHPの実行環境はgRPCのクライアントとして利用するつもりでした。
また、Proxy配下にいるために、ホストOS上ではyumを始めとした外部通信をするコマンドに対してProxy通過設定(「http_proxy」の指定)を済ませてはいました。

なお、PHPの実行環境はこちらのページの構築内容をそのまま利用させていただきました。

tkzo.jp

状況

docker-composeの実行時、以下のエラーが発生。

No releases available for package "pecl.php.net/grpc"

なお、実行したDockerファイルの内容は以下の通り。

# Dockerfile

FROM php:7.2-cli

# Install basics, grpc, protobuf
RUN apt-get update \
 && apt-get install -y vim git zip wget automake libtool libz-dev \
 && pecl install grpc \
 && pecl install protobuf

〜(以下略)〜

軽くググると、sudoをつけて実行する、php-devやgrpc-devをインストールする等が出てきました。試してみましたが、sudoコマンドがなかったり、devもインストールできなかったりで、状況は変わりませんでした。

解決方法

ふと、pecl(およびpear)の通信がProxyにブロックされているんじゃないかと思い、Proxyを通すようにDockerファイルを修正してみたところ、エラーが解消されました。

修正内容は「pecl」コマンドの実行前に「RUN pear config-set http_proxy <プロキシサーバのURLとポート>」を実行させることでOK。pearコマンドの内容ですが、pcelでもこれでProxy通過の設定になります。

# Dockerfile

FROM php:7.2-cli

# Install basics, grpc, protobuf
RUN apt-get update \
 && apt-get install -y vim git zip wget automake libtool libz-dev

RUN pear config-set http_proxy http://your-proxy:portno

RUN  pecl install grpc \
 && pecl install protobuf

〜(以下略)〜

Dockerファイルとして展開する場合は、環境依存になってしまうので別途の対応は必要になると思います。でも、自分の場合は動作検証が第一の目的だったので、一旦はこれで良しとしました。

というよりも、調査に2-3時間を費やして原因がこれだったので、ガックリしちゃいました。。。Proxy環境下の検証は、油断するとすぐハマる。