概要
昔使っていたsymfony 1.4 を動かそうと思い立ちDockerでPHP 5.4環境を作ったのですが、それにあたってつまづいたところを書き留めておきます。
使用するDockerイメージ
php:5.4-apache
を使用します。
FROM php:5.4-apache
apt-get update
が失敗する
公開鍵が認証されてない
W: GPG error: http://****** kali-rolling InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY *********
apt-get update
をしようとすると、「公開鍵が認証されてない」というエラーが発生しました。
apt-get update
の前に認証されていない公開鍵を取得していきます。
RUN apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 04EE7237B7D453EC \
&& apt-get update \
ライブラリが 404 Not Found
こちらもapt-get update
をしようとすると、404 Not Found
になるライブラリがありました。
E: Failed to fetch http://***** 404 Not Found
E: Some index files failed to download. They have been ignored, or old ones used instead.
apt-get update
の前に、リンク切れになってしまったライブラリの向き先をアーカイブに変更します。
RUN echo "deb http://archive.debian.org/debian/ stretch main" > /etc/apt/sources.list \
&& echo "deb http://archive.debian.org/debian-security stretch/updates main" >> /etc/apt/sources.list \
&& apt-get update
/etc/apache2/apache2.conf
で Syntax error
ApacheのDocumentRootを変更するために公式の手順をそのまま実行したのですが、Syntax errorになってしまいました。
ENV APACHE_DOCUMENT_ROOT /path/to/new/root
RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf
RUN sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf
上のようにすると、DocumentRootの部分が下記のようになってしまう。
- <Directory /var/www/>
+ <Directory ${APACHE_DOCUMENT_ROOT}>
AllowOverride All
Require all granted
</Directory>
- DocumentRoot /var/www/html
+ DocumentRoot ${APACHE_DOCUMENT_ROOT}html
DocumentRootの行が正しく変換されていません。
ENV APACHE_DOCUMENT_ROOT /path/to/new/root
- RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf
+ RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/sites-available/*.conf
RUN sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf
書き換えを工夫することで解決。
<Directory ${APACHE_DOCUMENT_ROOT}>
AllowOverride All
Require all granted
</Directory>
DocumentRoot ${APACHE_DOCUMENT_ROOT}
Dockerfile
参考までDockerfile全体を記載します。
サンプルDockerfile
FROM php:5.4-apache
RUN apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 04EE7237B7D453EC \
&& apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 648ACFD622F3D138 \
&& apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 0E98404D386FA1D9 \
&& apt-key adv --keyserver keyserver.ubuntu.com --recv-keys EF0F382A1A7B6500 \
&& apt-key adv --keyserver keyserver.ubuntu.com --recv-keys AA8E81B4331F7F50 \
&& apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 112695A0E562B32A \
&& echo "deb http://archive.debian.org/debian/ stretch main" > /etc/apt/sources.list \
&& echo "deb http://archive.debian.org/debian-security stretch/updates main" >> /etc/apt/sources.list \
&& apt-get update \
&& apt-get install -y \
git \
zip \
unzip \
libxslt1-dev \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
RUN docker-php-ext-install xsl
RUN pecl install apcu-4.0.11 && docker-php-ext-enable apcu
RUN a2enmod rewrite
ENV APACHE_DOCUMENT_ROOT /var/www/html/web
RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/sites-available/*.conf
RUN sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf
COPY php.ini /usr/local/etc/php
Hello symfony 1.4
これを表示するのに半日かかってしまいました・・・。
参考記事
大変助かりました🙇