Docker と Tailscale を同居させたら docker pull が通らなくなった

現象

自宅の CasaOS で動かしている Portainer で docker イメージの pull が突然できなくなりました。

このとき CasaOS のパッケージで同時に tailscale もインストールしていました。

原因

切り分けのため CasaOS パッケージの tailscale をアンインストールしてみましたが、現象は改善しません。
恐らくですが、docker デーモンの再起動がきっかけで問題が発生しているようです。

根本的な原因は docker が作成する仮想 nic と tailscale の仮想 nic が競合することで発生するらしい。具体的には tailscale が先に起動するとうまくないようです。

対策

1. tailescape を CasaOS パッケージから公式に切り替え

curl コマンドなのでバージョンの追随が面倒だと思っていましたが、
実体は、apt しているようです。
独自の apt ソースの追加とパッケージのインストールを curl で取ってきたスクリプトで行っているようです。

$ curl -fsSL https://tailscale.com/install.sh | sh

2. tailscale の起動順を docker の後に固定

$ sudo mkdir -p /etc/systemd/system/tailscaled.service.d
$ sudo tee /etc/systemd/system/tailscaled.service.d/after-docker.conf <<'EOF'
[Unit]
After=docker.service
PartOf=docker.service
EOF

$ sudo systemctl daemon-reload

; 以下で反映を確認
$ systemctl cat tailscaled
$ systemctl show tailscaled -p After -p PartOf

3. 動作確認

$ sudo tailscale up
$ sudo systemctl restart docker

$ sleep 5

$ systemctl is-active tailscaled
$ ip route get 1.1.1.1
$ docker pull hello-world

参考

Tailscale Linux インストール
https://tailscale.com/kb/1031/install-linux/


Comments

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です