とあるUbuntuインスタンスのソフトウェアメンテナンスをしたんですよ。
$ sudo apt-get -u upgrade
そのあとDockerで動いているサービスがちゃんと動いているか確認するために、コマンドを実行したらこんなエラーが表示されました。
$ docker-compose ps ERROR: client version 1.22 is too old. Minimum supported API version is 1.24, please upgrade your client to a newer version
Ubuntuにはdocker.ioというパッケージとdocker-composeというパッケージが共にdebパッケージで提供されていて、docker.ioパッケージが新しくなったけど、dokcer-composeパッケージは更新されていないというオチなんかもしれません。
とりあえずリポジトリーに存在する古いバージョンを探してみます。
$ sudo apt-get -u install -y apt-show-versions $ sudo apt-show-versions -a -p docker.io docker.io:amd64 26.1.3-0ubuntu1~20.04.1 install ok installed docker.io:amd64 19.03.8-0ubuntu1 focal ja.archive.ubuntu.com docker.io:amd64 20.10.21-0ubuntu1~20.04.2 focal-security ja.archive.ubuntu.com docker.io:amd64 26.1.3-0ubuntu1~20.04.1 focal-updates ja.archive.ubuntu.com docker.io:amd64/focal-updates 26.1.3-0ubuntu1~20.04.1 uptodate
うわっ!? Ubuntu 20.04だ... 早くバージョンアップしないと。
docker-composeも確認しましたが、これより新しいバージョンは提供されていませんでした。debパッケージに拘らなければ外部から持ってくる手もありますが、いずれこの環境はメンテナンスする予定ですのでdocker.ioをダウングレードする対応にします。
$ sudo apt-show-versions -a -p docker-compose docker-compose:all 1.25.0-1 install ok installed docker-compose:all 1.25.0-1 focal ja.archive.ubuntu.com docker-compose:all/focal 1.25.0-1 uptodate
確認して、focal-securityにあるバージョン20.10.21-0ubuntu1~20.04.2にします。
$ sudo apt-get install docker.io=20.10.21-0ubuntu1~20.04.2 Reading package lists... Done Building dependency tree Reading state information... Done Suggested packages: aufs-tools cgroupfs-mount | cgroup-lite debootstrap docker-doc rinse zfs-fuse | zfsutils The following packages will be DOWNGRADED: docker.io 0 upgraded, 0 newly installed, 1 downgraded, 0 to remove and 3 not upgraded. Need to get 30.3 MB of archives. After this operation, 16.1 MB of additional disk space will be used. Do you want to continue? [Y/n] y
問題なくコマンドが実行できました。
$ docker-compose ps
Name Command State Ports
----------------------------------------------------------------------------------------------------------
hoge1 dumb-init /usr/local/tomca ... Up 0.0.0.0:8080->8080/tcp,:::8080->8080/tcp
huga1 docker-entrypoint.sh postgres Up 5432/tcp
Dockerでアプリを動かしているのでOSやバージョン、パッケージバージョンを考えなくても良くなったので楽になったとはいえ、このような罠はあるからこういうことも考慮したメンテナンスの自動化はどうしたらいいかなあなどと考える今日この頃。
Ubuntu 20.04標準サポート終了まであと1か月