Debian sid環境でDocker Composeが動かなくなった

Note

バグ報告したところ，2025-01-19(JSTでは20日)にパッケージが更新され，docker-composeパッケージがPython 3.13でも動作するようになりました．v2対応はまだ．

I uploaded docker-compose 1.29.2-6.4 earlier today to fix that. (I
can’t help with packaging 2.x, though.)

— #1040417 – docker-compose V1 is depreciated. – Debian Bug report logs

Replace pipes with shlex for Python 3.13 compatibility (closes:
#1084703).

— metadata.ftp-master.debian.org/changelogs//main/d/docker-compose/docker-compose_1.29.2-6.4_changelog

Package: docker-compose | Debian Sources patch

Debian sidを再起動したあと自動起動するようになっていたDocker Composeコンテナが動いていません．手動で起動しようとすると以下のようなエラー．

$ docker-compose -v
Traceback (most recent call last):
File "/usr/bin/docker-compose", line 33, in <module>
sys.exit(load_entry_point('docker-compose==1.29.2', 'console_scripts', 'docker-compose')())
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/bin/docker-compose", line 25, in importlib_load_entry_point
return next(matches).load()
~~~~~~~~~~~~~~~~~~^^
File "/usr/lib/python3.13/importlib/metadata/__init__.py", line 179, in load
module = import_module(match.group('module'))
File "/usr/lib/python3.13/importlib/__init__.py", line 88, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 1026, in exec_module
File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
File "/usr/lib/python3/dist-packages/compose/cli/main.py", line 5, in <module>
import pipes
ModuleNotFoundError: No module named 'pipes'

そういえば少し前にPythonのversionが上がったのでそれが関係していそうです．
pipes関連のパッケージはdocker.io/docker-composeパッケージの依存には見当たりません．apt-cache searchでさがしても見当たりません．
pipesはPython 3.11で廃止され，3.13で削除されたようです．そしてDebian sidのPythonは少し前に3.13に上がっています．

PEP 594 – Removing dead batteries from the standard library | peps.python.org

$ python3 --version
Python 3.13.1
$ dpkg-query -W python3
python3 3.13.1-2

DebianとしてはDocker Comose v1は廃止されているのでv2に上げたいけどgoなどの依存パッケージが欠如しているためv2のパッケージ化が止まっているようです．

#1040417 – docker-compose V1 is depreciated. – Debian Bug report logs

Docker Compose: What’s New, What’s Changing, What’s Next | Docker

という感じでPython 3.13にアップグレードしたDebian sidではdocker-composeパッケージは動かなくなっています．
恐らくDocker Compose v2が降りてくるまでは動かないのかなと．

ということでとりあえずはDocker謹製のものを導入して凌ぐ必要がありそうです．

Docker.com謹製Dockerを導入

以下のページを参考に導入しました．

Debian | Docker Docs

Debianの関連パッケージを削除

$ sudo apt remove docker.io docker-cli docker-doc docker-compose podman-docker containerd runc

DockerのPGP鍵の登録

$ sudo apt install ca-certificates curl
$ sudo install -m 0755 -d /etc/apt/keyrings
$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo tee /etc/apt/keyrings/docker.asc
$ gpg --show-keys /etc/apt/keyrings/docker.asc
pub rsa4096 2017-02-22 [SCEA]
9DC858229FC7DD38854AE2D88D81803C0EBFCD88
uid Docker Release (CE deb) <docker@docker.com>
sub rsa4096 2017-02-22 [S]
$ sudo chmod a+r /etc/apt/keyrings/docker.asc
$ w3m -dump https://download.docker.com/linux/debian/dists/
Index of linux/debian/dists/

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

../
bookworm/
bullseye/
buster/
jessie/
stretch/
wheezy/

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
$ echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
bookworm stable" | \
sudo tee /etc/apt/sources.list.d/docker.list
deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian bookworm stable
$ sudo apt update
$ sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
$ docker --version
Docker version 27.5.0, build a187fa5
$ docker compose version
Docker Compose version v2.32.4

Note

trixie(testing), sid(unstable), experimentalのパッケージはないようなのでbookworm(stable)用を利用しました．

Docker動作確認

$ docker run hello-world

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/

For more examples and ideas, visit:
https://docs.docker.com/get-started/

Docker Cmposeも動作するのを確認

$ cd $PATH_TO_COMPOSE
$ docker compose up