Ubuntu 24.04でdocker-composeが動かず焦った話
先日Ubuntu 24.04 LTSが正式リリースとなりました
どんなものかと触ってみて、なんとなく22.04からのマイナーバージョンアップ感(Windows 10から11になった感じ)があるだけだし開発環境にしてしまうか!と思い立ったわけです。
開発環境はいつもdocker-composeを使っており、これまでと同じようにセットアップして docker-compose up -d とすると、
ModuleNotFoundError: No module named 'distutils'
というエラー
Ubuntu 24.04 LTSでのdocker-composeのエラー解決法
結論から書いておくと、docker-compose
ではなくdocker本体に取り込まれたdocker compose
コマンド(v2系)を使うのが正解です
docker-composeコマンドが非推奨になっていたことを知らなかったので(そんなものが変わると思っておらず全くキャッチアップしていなかった)、軽くハマりました
この先は、その過程を順にご紹介しておきます
distutilsってPython標準モジュールよね?という罠
入っているPythonのバージョンを確認すると3.12で、distutilsはdeprecatedと。
そこでissueとかreleaseを確認すべくdocker-composeのgithubを確認しましたが、全く情報がありません。
これは変だ…
この時点でv2になっているということに気づけば良かったのですが、続いて同じところでハマってそうなフォーラムの投稿を探します
同じところでハマった人の投稿を発見
それがこちら。
Noble: ModuleNotFoundError: No module named ‘distutils’
コメントの中に
running ‘docker compose’ instead of ‘docker-compose’ seems to work around the problem.
というのがあり、なんですって??ということで試してみます
無事起動しました!
docker-composeとdocker composeって何かが動かないとか細かい違いなかったっけ?
docker composeの存在は前から知っていたのですが、互換性というところでずっとdocker-composeを使ってきました。
何か動かないものがあったりしたはず…と調べ始めてまず目についたのがこれ
Docker Compose V2(Version 2) GA のまとめ
そんな前から非推奨になってたの!?
本当に、普段使ってるものの情報はちゃんとチェックしておけよ!と自分に言いたい。。。
そりゃ、compose側にissueとかもなくて当然です
2つのコマンドの違いを調べると
docker composeと docker-composeの違いは?
- 生成されるコンテナ名の区切り文字の変更
- docker-compose scaleがdocker compose up –scaleに変更
- docker-compose rm –allがなくなった
とのことですが、何かができなかったとかあったような…とちょっとモヤモヤしつつ動作検証を開始しました。
あとは、docker-composeとdocker composeの違いによるものではありませんが、
`version` is obsolete
というwarningが出るので、compose.ymlからversionを削除しておいた方が良さそうです。