動かざることバグの如し

近づきたいよ 君の理想に

DockerでPHP5.6実行しようとするとapt updateエラーになる問題

経緯

今更だがDockerでphp 5.6を実行する

パッケージインストールためにapt update

$ docker run --rm -it php:5.6-fpm bash
root@2bfcb32fe2f2:/var/www/html# apt update

しかしエラーになる

Ign:1 http://deb.debian.org/debian stretch InRelease
Ign:2 http://deb.debian.org/debian stretch-updates InRelease
Err:3 http://deb.debian.org/debian stretch Release
  404  Not Found
Err:4 http://deb.debian.org/debian stretch-updates Release
  404  Not Found
Ign:5 http://security.debian.org/debian-security stretch/updates InRelease
Err:6 http://security.debian.org/debian-security stretch/updates Release
  404  Not Found [IP: 151.101.66.132 80]
Reading package lists... Done
E: The repository 'http://deb.debian.org/debian stretch Release' does not have a Release file.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.
E: The repository 'http://deb.debian.org/debian stretch-updates Release' does not have a Release file.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.
E: The repository 'http://security.debian.org/debian-security stretch/updates Release' does not have a Release file.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.

原因

エラーメッセージから、Dockerコンテナ内でのapt updateが失敗した原因は、Debianの’stretch’リリースのリポジトリが見つからないことである。これは、'stretch’が古いバージョンであり、現在はサポートされていないため、デフォルトのリポジトリから削除された可能性がある。

対策

この問題を解決するための一般的な対策は、以下のコマンドを実行して、リポジトリのURLをarchive.debian.orgに変更することである。これにより、古いバージョンのパッケージを取得できるようになる。

sed -i -e 's/deb.debian.org/archive.debian.org/g' \
           -e 's|security.debian.org|archive.debian.org/|g' \
           -e '/stretch-updates/d' /etc/apt/sources.list

その他

Let's EncryptのルートCA期限切れ問題

sed -i '/^mozilla\/DST_Root_CA_X3.crt$/ s/^/!/' /etc/ca-certificates.conf && update-ca-certificates

詳細は Let's EncryptのルートCA期限切れで OpenSSL 1.0.2が思わぬ事故を起こす件 | ワルブリックス株式会社 を参照すること