dockerとproxy
dockerやdocker-composeをプロキシ環境下で使うのに苦労したので忘れないようにメモしておきます。テスト環境をクライアントPC上のVMで構築した際、社内プロキシがドメイン参加前提のWindowsベースで、回避のためにローカルのプロキシ(ntlmaps)を立てている時、dockerではローカルのプロキシと名前解決の相性が悪くdockerは通るもののdocker-composeがbuildで失敗する(インターネットにアクセス出来ない)ことが続いたので、なんでだろうと調べたところdockerはローカルでは名前解決しない?ことがわかったのでローカルのプロキシをあきらめ、適当なサーバー上にプロキシ(ntlmaps)を立てて対応することに。ntlmapsはNTLM認証迂回のためのプロキシです。
まずはdockerのプロキシ対応から。これは単純。daemon-reloadとrestartを忘れずに。プロキシ経由していることを確認するために適当なイメージをpullしてみると良いと思います。IPアドレスは自身の環境に合わせて要修正です。
[Service] Environment='http_proxy=http://172.16.2.60:5865' Environment='https_proxy=http://172.16.2.60:5865' Environment='no_proxy=192.168.38.131'
「WordPress用のPHP-FPM環境を構築」する際に、社内からインターネットに出られないことでエラーになる部分をプロキシで回避するために追加したのは以下の通り。6-7行目が該当部分です。
FROM php:7.3.6-fpm # Replace shell with bash so we can source files RUN rm /bin/sh && ln -s /bin/bash /bin/sh ENV TZ='Asia/Tokyo' COPY apt.conf /etc/apt/apt.conf RUN pear config-set http_proxy http://172.16.2.60:5865
コンテナ内にコピーするapt.confの中身は以下の通り。IPアドレスは自身の環境に合わせて要修正です。
Acquire::http::proxy "http://172.16.2.60:5865/"; Acquire::https::proxy "http://172.16.2.60:5865/";
上記の設定があれば、以下のコンテナ構築は成功します。
# make sure apt is up to date RUN apt-get update --fix-missing RUN apt-get install -y curl RUN apt-get install -y build-essential libssl-dev zlib1g-dev libpng-dev libjpeg-dev libfreetype6-dev RUN apt-get update && apt-get install libmagickwand-dev -y --no-install-recommends \ && pecl install imagick-3.4.3 \ && docker-php-ext-enable imagick RUN docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \ && docker-php-ext-install gd RUN docker-php-ext-install pdo pdo_mysql mysqli bcmath exif COPY php.ini /usr/local/etc/php/php.ini
WordPressのプロキシ設定はwp-config.phpに以下の設定を追加することで対応しますが、プロキシを経由しないアクセスをきちんと設定していなかったのでローカルにあるElasticsearchサーバーに接続はするもののインデックスが作成出来ないという事象に遭遇してしまいました。お忘れなく。最後の行がバイパス設定でローカルVM上のアドレスを記載しています。Elasticsearchがリモートの時は不要です。IPアドレスは自身の環境に合わせて要修正です。
define('WP_PROXY_HOST', '172.16.2.60'); define('WP_PROXY_PORT', '5865'); define('WP_USEPROXY', 'TRUE'); define('WP_PROXY_BYPASS_HOSTS','192.168.38.131');
1週間ぐらい悩みましたが何とか解決出来ました。コンテナ内からプロキシを使いたいのではなくて、コンテナ構築のために必要なプロキシ設定です。コンテナが恒常的にプロキシを必要とする場合はENV等の環境設定が必要です。