hack のためのネタ帳, etc,,,

状況

ZFS root の Ubuntu 22.04.2 LTS に snap で docker を入れるところまでは行ったんだけど、
docker run -it --rm ubuntu
でコンテナ立ち当ててコンテナ内から
apt update
したいんだけど、
0% [Connecting to archive.ubuntu.com] [Connecting to security.ubuntu.com]
でしばらくだんまりを続けた後、
Ign:1 http://archive.ubuntu.com/ubuntu jammy InRelease                   
Ign:2 http://security.ubuntu.com/ubuntu jammy-security InRelease         
0% [Connecting to archive.ubuntu.com] [Connecting to security.ubuntu.com]
Ign:1 http://archive.ubuntu.com/ubuntu jammy InRelease                   
Ign:2 http://security.ubuntu.com/ubuntu jammy-security InRelease         
Ign:3 http://archive.ubuntu.com/ubuntu jammy-updates InRelease           
Ign:2 http://security.ubuntu.com/ubuntu jammy-security InRelease         
0% [Connecting to archive.ubuntu.com] [Connecting to security.ubuntu.com]
のような箇所で何度かだんまりを続け、
最終的に
$ docker run -it --rm ubuntu
root@725e2297ddcb:/# apt update
Ign:1 http://archive.ubuntu.com/ubuntu jammy InRelease                   
Ign:2 http://security.ubuntu.com/ubuntu jammy-security InRelease         
Ign:3 http://archive.ubuntu.com/ubuntu jammy-updates InRelease           
Ign:2 http://security.ubuntu.com/ubuntu jammy-security InRelease         
Ign:4 http://archive.ubuntu.com/ubuntu jammy-backports InRelease         
Ign:2 http://security.ubuntu.com/ubuntu jammy-security InRelease         
Ign:1 http://archive.ubuntu.com/ubuntu jammy InRelease                   
Err:2 http://security.ubuntu.com/ubuntu jammy-security InRelease         
  Temporary failure resolving 'security.ubuntu.com'
Ign:3 http://archive.ubuntu.com/ubuntu jammy-updates InRelease           
Ign:4 http://archive.ubuntu.com/ubuntu jammy-backports InRelease
Ign:1 http://archive.ubuntu.com/ubuntu jammy InRelease
Ign:3 http://archive.ubuntu.com/ubuntu jammy-updates InRelease
Ign:4 http://archive.ubuntu.com/ubuntu jammy-backports InRelease
Err:1 http://archive.ubuntu.com/ubuntu jammy InRelease
  Temporary failure resolving 'archive.ubuntu.com'
Err:3 http://archive.ubuntu.com/ubuntu jammy-updates InRelease
  Temporary failure resolving 'archive.ubuntu.com'
Err:4 http://archive.ubuntu.com/ubuntu jammy-backports InRelease
  Temporary failure resolving 'archive.ubuntu.com'
Reading package lists... Done        
Building dependency tree... Done
Reading state information... Done
All packages are up to date.
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/jammy/InRelease  Temporary failure resolving 'archive.ubuntu.com'
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/jammy-updates/InRelease  Temporary failure resolving 'archive.ubuntu.com'
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/jammy-backports/InRelease  Temporary failure resolving 'archive.ubuntu.com'
W: Failed to fetch http://security.ubuntu.com/ubuntu/dists/jammy-security/InRelease  Temporary failure resolving 'security.ubuntu.com'
W: Some index files failed to download. They have been ignored, or old ones used instead.
root@725e2297ddcb:/# 
のような感じで失敗する。
"Temporary failure resolving" が出てるし、以前踏んだ resolv 出来ない問題か?と思い、
docker run -it --rm --dns 8.8.8.8 ubuntu
も試してみたが駄目。

Bing 先生に聞いてみると


Q:
snap で入れた docker で `docker -it --rm ubuntu` したんですが、起動したコンテナ内で `apt update` 出来ません。原因は何でしょうか?解決するにはどうしたら良いですか

A:
✓ ‘snapで入れたdockerでapt updateが出来ない’ を検索しています
✓ 回答を生成しています…

apt updateが出来ない原因として、コンテナ内から外に接続できない状況が考えられます。Dockerもしくはコンテナにプロキシ設定されると解決するようです[1]。また、DNSサーバーにアクセスできないことも原因の一つかもしれません。dockerコンテナ起動時のrunコマンドのオプションでDNSサーバーを指定することができます[2]。

詳細情報:
1. https://teratail.com/questions/349415
2. https://ja.stackoverflow.com/questions/49974/docke...
3. https://ja.stackoverflow.com/questions/67752/docke...

Q:
--dns 8.8.8.8 や --dns 192.168.1.1 および --dns 127.0.0.1 は試してみましたが効果がありませんでした。

A:
DNSサーバーの設定が効果がなかったとのことですね。他にも、コンテナ内から外に接続できない状況が考えられます。Dockerもしくはコンテナにプロキシ設定されると解決するようです。プロキシ設定について詳しく知りたいですか?

Q:
プロキシ設定について詳しく教えてください。

A:
✓ ‘Docker プロキシ設定’ を検索しています
✓ 回答を生成しています…

DockerはLinuxシステムの環境変数にあるhttp_proxyやhttps_proxyとは別に、専用のproxy設定を施す必要があります[1]。Dockerクライアント上では、ユーザのホームディレクトリ内で~/.docker/config.jsonファイルを作成・編集します。以下の例のようなJSONを追加します[2]。
{
 "proxies":
 {
   "default":
   {
     "httpProxy": "http://proxy.example.com:8080",
     "httpsProxy": "http://proxy.example.com:8080",
     "noProxy": "*.test.example.com,.example2.com"
   }
 }
}
必要があれば、プロキシのタイプとしてhttpsProxyやftpProxyに置き換えます[2]。

詳細情報:
1. https://qiita.com/KenFujita/items/ed5a73f83273b4ef...
2. https://docs.docker.jp/network/proxy.html
3. https://maku77.github.io/p/w69cfim/
4. https://qiita.com/dkoide/items/ca1f4549dc426eaf373...
5. https://qiita.com/m-tmatma/items/5718ac5294e6acc61...

Q:
LAN 内から利用できる proxy はないのですが?

A:
LAN内から利用できるプロキシがない場合、プロキシ設定は不要です。他にも、コンテナ内から外に接続できない原因が考えられます。例えば、ファイアウォールの設定やネットワークの問題などが考えられます。

Q:
ufw の可能性はありますか?その場合、解消する方法はありますか?

A:
✓ ‘ufw docker’ を検索しています
✓ 回答を生成しています…

はい、ufwの設定が原因でコンテナ内から外に接続できない可能性があります。ufwの設定はDockerでは制御されず、iptablesで設定します[1]。ufw-dockerというプロジェクトがあり、DockerとUFWのセキュリティ問題を修正することができます[2]。

詳細情報:
1. https://qiita.com/ohhara_shiojiri/items/e08076009c...
2. https://github.com/chaifeng/ufw-docker
3. https://qiita.com/jqtype/items/9574ef74868b7332393...

そこで、
`journalctl -xe` してみると
 3月 23 17:32:41 HOSTNAME systemd-resolved[709482]: Using degraded feature set TCP instead of UDP for DNS server 127.0.1.1.
 3月 23 17:32:41 HOSTNAME systemd-resolved[709482]: Using degraded feature set UDP instead of TCP for DNS server 127.0.1.1.
 3月 23 17:32:41 HOSTNAME kernel: [UFW BLOCK] IN=docker0 OUT=br0 PHYSIN=veth73415c4 MAC=##:##:##:##:##:##:##:##:##:##:##:##:##:## SRC=172.17.0.2 DST=192.168.1.1 LEN=79 TOS=0x00 PREC=0x00 TTL=63 ID=60379 DF PROTO=UDP SPT=47072 DPT=53 LEN=59 
 3月 23 17:32:41 HOSTNAME kernel: [UFW BLOCK] IN=docker0 OUT=br0 PHYSIN=veth73415c4 MAC=##:##:##:##:##:##:##:##:##:##:##:##:##:## SRC=172.17.0.2 DST=192.168.1.1 LEN=78 TOS=0x00 PREC=0x00 TTL=63 ID=46377 DF PROTO=UDP SPT=51256 DPT=53 LEN=58 
みたいなログがあったので、ufw 確定かなって感じ。
一応、聞いてみると、

Q:
`journalctl -xe` してみると以下のようなログがありました。
```
kernel: [UFW BLOCK] IN=docker0 OUT=br0 PHYSIN=veth73415c4 MAC=##:##:##:##:##:##:##:##:##:##:##:##:##:## SRC=172.17.0.2 DST=192.168.1.1 LEN=79 TOS=0x00 PREC=0x00 TTL=63 ID=60379 DF PROTO=UDP SPT=47072 DPT=53 LEN=59
kernel: [UFW BLOCK] IN=docker0 OUT=br0 PHYSIN=veth73415c4 MAC=##:##:##:##:##:##:##:##:##:##:##:##:##:## SRC=172.17.0.2 DST=192.168.1.1 LEN=78 TOS=0x00 PREC=0x00 TTL=63 ID=46377 DF PROTO=UDP SPT=51256 DPT=53 LEN=58
```

A:
ログを見ると、ufwがDockerコンテナからのトラフィックをブロックしているようです。これは、ufwの設定が原因でコンテナ内から外に接続できない可能性が高いです。ufw-dockerというプロジェクトがあり、DockerとUFWのセキュリティ問題を修正することができます。

とのこと。

解法

とりあえず
$ sudo ufw route allow in on docker0 from any to any
ルールを追加しました
ルールを追加しました (v6)
ってして、
$ sudo ufw status
状態: アクティブ

To                         Action      From
--                         ------      ----
...
Anywhere                   ALLOW FWD   Anywhere on docker0       
Anywhere (v6)              ALLOW FWD   Anywhere (v6) on docker0  
...
ってエントリ追加してみたところ、無事 apt update が通るようになり --dns も不要だった。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Wiki内検索

フリーエリア

管理人/副管理人のみ編集できます