概要
担当案件の中で、PHP5.4が動く環境を準備する必要があり、準備を進める中でいくつかエラーが発生しました。
調査の中で参考にさせていただいた内容もあったので、今後のためにメモとして記録しておきます。
参考記事
調査の際、上記のサイトに大変お世話になりました。
ありがとうございます!
Dockerfile
今回はdocker-compose.ymlを使用し、指定したフォルダ内に配置しているDockerfileをビルドしています。
また、別ファイルで環境変数を管理しているため、Pathについては適宜変更してください。
最初の段階でのDockerfileは下記です。※一部省略箇所あり
FROM php:5.4.45-apache
RUN apt-get update
RUN apt-get install -y vim htop libpq-dev libonig-dev
RUN docker-php-ext-install mbstring mysql
RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf \
&& sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf \
&& 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/php.ini
・
・
・
問題箇所
1. パッケージが404 Not Found
になる
エラー発生タイミングとしては、ビルドに必要なパッケージ群をインストールしているapt-get update
を実行した際に、404 Not Found
になってしまいました。
8.812 Err http://httpredir.debian.org jessie/main amd64 Packages
8.812 404 Not Found
9.361 Err http://httpredir.debian.org jessie-updates/main amd64 Packages
9.361 404 Not Found
9.367 W: Failed to fetch http://security.debian.org/dists/jessie/updates/main/binary-amd64/Packages 404 Not Found [IP: 151.101.130.132 80]
9.367
9.367 W: Failed to fetch http://httpredir.debian.org/debian/dists/jessie/main/binary-amd64/Packages 404 Not Found
9.367
9.367 W: Failed to fetch http://httpredir.debian.org/debian/dists/jessie-updates/main/binary-amd64/Packages 404 Not Found
9.367
9.367 E: Some index files failed to download. They have been ignored, or old ones used instead.
------
failed to solve: process "/bin/sh -c apt-get update" did not complete successfully: exit code: 100
原因は、パッケージのファイルの置き場所のサイトが変更されていたためエラーが発生したようです。
なので、下記のように変更してパッケージファイルの置き場所を変更すると、エラーが解消されました。
変更前
RUN 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
2. ビルドプロセスが完了しない
apt-get install
を行なった際、下記のようなエラーが表示され、Dockerビルドが中断し、ビルドプロセスが完了しませんでした。
--force-yes
を追加して再度実行しましたが、解決せず…。
.
.
3.356 7 upgraded, 11 newly installed, 0 to remove and 155 not upgraded.
3.356 Need to get 9966 kB of archives.
3.356 After this operation, 37.7 MB of additional disk space will be used.
3.356 WARNING: The following packages cannot be authenticated!
3.356 libtinfo5 libncursesw5 libncurses5 libssl1.1 xxd vim-common libgpm2
3.356 libgssapi-krb5-2 libkrb5-3 libk5crypto3 libkrb5support0 htop libonig4
3.356 libonig-dev libpq5 libpq-dev vim-runtime vim
3.357 E: There are problems and -y was used without --force-yes
------
failed to solve: process "/bin/sh -c apt-get install -y vim htop libpq-dev libonig-dev" did not complete successfully: exit code: 100
下記の内容を追加することで、プロンプトのデフォルトの選択肢が選択できるらしく、
これでビルドプロセスが途中で止まらないようにすることができました。
RUN echo '* libraries/restart-without-asking boolean true' |
debconf-set-selections
変更前
RUN apt-get install -y vim htop libpq-dev libonig-dev
変更後
RUN apt-get install -y --force-yes vim \
&& echo '* libraries/restart-without-asking boolean true' | debconf-set-selections \
&& apt-get install -y --force-yes htop \
&& apt-get install -y --force-yes libpq-dev \
&& apt-get install -y --force-yes libonig-dev
Dockerfile最終版
最終的に編集した後のDockerfileも記載しておきます。
FROM php:5.4.45-apache
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
RUN apt-get install -y --force-yes vim \
&& echo '* libraries/restart-without-asking boolean true' | debconf-set-selections \
&& apt-get install -y --force-yes htop \
&& apt-get install -y --force-yes libpq-dev \
&& apt-get install -y --force-yes libonig-dev
RUN docker-php-ext-install mbstring mysql
RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf \
&& sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf \
&& sed -ri -e 's!/var/www!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf
.
.
.