はてなの金次郎

とあるエンジニアの技術系ブログ

jessieからstretchへのアップデートでlibmysqlclient-devはdefault-libmysqlclient-devへと生まれ変わったのだ...

はじめに

FROM python:latest

RUN apt -y update
RUN apt install -y build-essential libmysqlclient-dev libpcre3-dev tzdata

...

python:latest をベースイメージとしたDockerfileのビルドで下記のエラーでコケてしまった際の対処方法です。

E: Package 'libmysqlclient-dev' has no installation candidate

今まで libmysqlclient-dev は普通にインストールできていたのにどうしてでしょう。。。

原因

FROM buildpack-deps:stretch <- stretchになってる!!

# ensure local python is preferred over distribution python
ENV PATH /usr/local/bin:$PATH

...

公式の python:latest のDockerfileのベースイメージが jessie から stretch にアップデートされており、 libmysqlclient-devdefault-libmysqlclient-dev に変更されていたことが原因でした。

Debian -- Details of package default-libmysqlclient-dev in stretch

解決策

FROM python:latest

RUN apt -y update
RUN apt install -y build-essential libpcre3-dev tzdata

...

libmysqlclient-dev を削除します。
名前から自明のように、 default-libmysqlclient-dev はデフォルトでインストールされているパッケージです。
jessie から stretch でデフォルトのパッケージに繰り上がったらしいですね。