タイトルで結論が出ているんですけどね。
Dockerファイル内で実施していたapt-getが問題なく動いていたので、peclの通信がProxyにブロックされているとはすぐに思いつけませんでした。
前提
Proxy環境配下で動いているCentOS 7.4上で、Dockerを利用してPHPの実行環境を作ろうとしました。ホストOSになるCentOS上にはPHPの環境は構築しておらず、Dockerで構築するPHPの実行環境はgRPCのクライアントとして利用するつもりでした。
また、Proxy配下にいるために、ホストOS上ではyumを始めとした外部通信をするコマンドに対してProxy通過設定(「http_proxy」の指定)を済ませてはいました。
なお、PHPの実行環境はこちらのページの構築内容をそのまま利用させていただきました。
状況
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環境下の検証は、油断するとすぐハマる。