有馬総一郎のブログ

(彼氏の事情)

2025年03月24日 08:07:11 JST - 3 minute read - Linux

Dockerコンテナが`Error response from daemon: Cannot restart container xxxx: driver failed programming external connectivity on endpoint xxxx (xxxx): failed to bind port 0.0.0.0:xxxx/tcp: fork/exec /usr/bin/rootlesskit-docker-proxy: no such file or directory`となって起動できない

ある日、 Minifluxに接続できないことに気付く。docker compose logs minifluxでログ見てもエラーを吐いてない。とりあえず再起動するか、とdocker compose restart minifluxすると以下のエラー。

$ docker compose restart miniflux 
[+] Restarting 0/1
 ⠹ Container miniflux  Restarting                                                                                                                                       0.2s 
Error response from daemon: Cannot restart container 1d73e6a0d722efc310081857092cd962cb06e096ff86c1e9b3f6e594148b2021: driver failed programming external connectivity on endpoint miniflux (c9a7a47281192d1f8ff7d5406288e46596d176c75c4b6363408150c3e97c08a6): failed to bind port 0.0.0.0:8280/tcp: fork/exec /usr/bin/rootlesskit-docker-proxy: no such file or directory

設定ファイルを見直す

最初はnginxdocker-compose.yamlの方を疑ったのだけど、前から同じ設定をしているので、特に問題はないというか、直すべきところがみつからない。

/etc/nginx/sites-available/domain

    ###
    # miniflux
    ###
    location /miniflux/ {
        proxy_pass http://127.0.0.1:8280/miniflux/;
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Host  $host;
    }

docker-compose.yaml

  miniflux:
    container_name: miniflux
    image: miniflux/miniflux:latest
    ports:
      - "127.0.0.1:8280:8080"
    restart: unless-stopped
    environment:
      - BASE_URL=https://xxx.com/miniflux/
      - DATABASE_URL=postgres://miniflux:xxxx@postgresql-server/miniflux?sslmode=disable
      - RUN_MIGRATIONS=1
    networks:
      - app-net

portを見直す

failed to bind port 0.0.0.0:8280/tcpとなっているので、最近、インストールしたアプリでポートが被っているのではないか?と確認するも…そんな感じではない。

$ netstat -atn
稼働中のインターネット接続 (サーバと確立)
Proto 受信-Q 送信-Q 内部アドレス            外部アドレス            状態      
・・・後略・・・
$ netstat -atn | grep 8280

というか、Dockerのポートマッピングは、joplinnavidromeなど他のDockerコンテナでもやってるのに、何故、minifluxだけ…書き方はnginxでもdocker-compose.yamlでも一緒だけどなぁ。

rootlesskitのインストールを勧められるが中断

では、 Geminiに聞いてみるとrootlesskitをインストールしろ的なことを言われる。

$ dpkg -s rootlesskit
dpkg-query: パッケージ 'rootlesskit' はまだインストールされておらず情報の利用は不可能です
Use dpkg --info (= dpkg-deb --info) to examine archive files.
$ ls /usr/bin/rootlesskit-docker-proxy
ls: '/usr/bin/rootlesskit-docker-proxy' にアクセスできません: そのようなファイルやディレクトリはありません
$ sudo apt install rootlesskit
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了        
状態情報を読み取っています... 完了        
以下のパッケージは「削除」されます:
  docker-ce-rootless-extras
以下のパッケージが新たにインストールされます:
  rootlesskit
アップグレード: 0 個、新規インストール: 1 個、削除: 1 個、保留: 0 個。
4,102 kB のアーカイブを取得する必要があります。
この操作後に追加で 5,150 kB のディスク容量が消費されます。
続行しますか? [Y/n] n
中断しました。

ということでインストールしようとするとdocker-ce-rootless-extrasが削除されるらしいので、中断。更に調べると v28 rootlesskit-docker-proxy not found · Issue #49519 · moby/mobyという課題を発見。

$ docker version
Client: Docker Engine - Community
 Version:           28.0.2

解決策

まあ、細けぇことはいいので、とりあえず、その場しのぎてきに対応したいと思ったら、

To resolve this (before the new version) just copy the rootlesskit-docker-proxy.sh from the Debian package (link in the previous post) to /usr/bin/rootlesskit-docker-proxy.sh Then Docker work great again (no need to restart Docker or reboot).

とあったので、これを行う。 deb ファイルを落してきて解凍して、その中から rootlesskit-docker-proxy をコピーする。

$ wget https://download.docker.com/linux/ubuntu/dists/jammy/pool/stable/amd64/docker-ce-rootless-extras_27.5.1-1~ubuntu.22.04~jammy_amd64.deb
--2025-03-24 07:17:36--  https://download.docker.com/linux/ubuntu/dists/jammy/pool/stable/amd64/docker-ce-rootless-extras_27.5.1-1~ubuntu.22.04~jammy_amd64.deb
download.docker.com (download.docker.com) をDNSに問いあわせています... 18.172.31.28, 18.172.31.47, 18.172.31.124, ...
download.docker.com (download.docker.com)|18.172.31.28|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 9603142 (9.2M) [binary/octet-stream]
‘docker-ce-rootless-extras_27.5.1-1~ubuntu.22.04~jammy_amd64.deb’ に保存中

docker-ce-rootless-extras_27.5.1-1~ubuntu.2 100%[========================================================================================>]   9.16M  6.92MB/s    in 1.3s    

2025-03-24 07:17:38 (6.92 MB/s) - ‘docker-ce-rootless-extras_27.5.1-1~ubuntu.22.04~jammy_amd64.deb’ へ保存完了 [9603142/9603142]

$ dpkg-deb -x  docker-ce-rootless-extras_27.5.1-1~ubuntu.22.04~jammy_amd64.deb docker-ce-rootless-extras
$ ls docker-ce-rootless-extras/usr/bin/
dockerd-rootless-setuptool.sh  dockerd-rootless.sh            rootlesskit                    rootlesskit-docker-proxy       
$ sudo cp docker-ce-rootless-extras/usr/bin/rootlesskit-docker-proxy /usr/bin/
[sudo] arimasou16 のパスワード: 
$ ls -l /usr/bin/rootlesskit-docker-proxy
-rwxr-xr-x 1 root root 8198888  3月 24 07:23 /usr/bin/rootlesskit-docker-proxy
$ 

すると、本当に問題なく起動できるようになった…まぁ、今後のアップデートとか不具合おきるかも知れんけど。

$ docker compose restart miniflux 
[+] Restarting 1/1
 ✔ Container miniflux  Started                                                                                                                                          1.0s