Dockerのバージョンアップ後にコンテナに外部からアクセスできなくなった | クズリーマンのカス備忘録

Dockerのバージョンアップ後にコンテナに外部からアクセスできなくなった

docker-logo docker
スポンサーリンク

環境

  • OS:
    • Ubuntu 20.04.3 LTS (Focal Fossa)
  • docker 20.10.24

事象

WEBサーバーを立ち上げるべく、以下のコマンドを実行しました。

$docker run --name hogehoge -d -p 8080:80 nginx

しかし外部からWEBへのアクセスができません。

タイムアウトになります。

外部からnmapコマンドでポートを見ると、filteredになっている

外部サーバーなどからnmapコマンドでポートを見ると、Web公開に使ってるポートがfilteredになっています。

$ nmap Dockerを構築してるサーバーのIPアドレス

80/tcp   filtered http

だが、Dockerホストやコンテナでnmapをたたくと、

open

になってるんだよなぁ~。

ポートを変えて純粋なnginxを起動しても事象変わらず。

$ docker run --name nginxtest -d -p 8080:80 nginx

でnginxコンテナを起動させて、

http://アドレス:8080

でブラウザアクセスしても、タイムアウトになります。

nmapの結果も変わらず、

8080が

filtered

の状態です。

原因

結論をいうと、
iptablesが原因でした。
詳細原因は、分からずじまいです。

ネットワーク環境の確認

  • どっかのルータとかファイアウォール専用機とかVMでポートフィルタリングしてるか

同じLAN内にある他のVMマシンで、Dockerを搭載していないApacheサーバーを立ち上げてみた。

このサーバーでは同じ事象は起きていなかった。

  • ブラウザでアクセスできる
  • 外部環境からnmapたたくと、80番がopen である

Dockerホストでの確認3箇所

以下を確認する。

  • Dockerコンテナ立ち上がってるか(Dockerホストから見れる時点で生きてるってわかるけど)
  • ポートのマッピングを確認(本当に8080なんだろうね?)
  • iptablesの確認(一番怪しい)

1つ1つ見ていきます。

まず、

  • Dockerコンテナ立ち上がってるか(Dockerホストから見れる時点で生きてるってわかるけど)
$ docker ps

生きてました。

次、

  • ポートのマッピングを確認(本当に8080なんだろうね?)
$ docker port nginxtest
80/tcp -> 0.0.0.0:8080
80/tcp -> :::8080

このコマンド初めて知った。

ちゃんと80番が8080にマッピングされてます。

次。

  • iptablesの確認(一番怪しい)

以下のコマンドで、対象ポートがブロックされていないか、確認できる。

sudo iptables --list

怪しそうな部分がなさげだった。

ためしに
iptablesを殺してみる。

sudo ufw disable

事象が解消された。
つまり以下の状態になった。

  • ブラウザでアクセスできる
  • 外部環境からnmapたたくと、Webサーバー用のポート8080番がopen である

iptablesの設定のどこがいけなかったのか?掘る

以下のコマンドでiptablesの設定を確認できる。

sudo iptables -L

じ、時間の関係で、追えませんでした。

。。。

Dockerのルールが追加されてなかったのかなー?

クラウドのAWSだとセキュリティグループで設定すれば良いのですがオンプレ環境などでDockerを利用する時にホスト側でファイアウォール設定します。

Dockerのファイアウォール設定(ufwとiptables) - Qiita
背景Dockerコンテナの各サービスポートを外部からフィルター制限するファイアウォール設定についてまとめてみました。動作環境ホスト側OS:Ubuntu Server 22.04LTSDoc…

今まで使えてたんだけどなー。

とりあえず、パッケージを最新化してみる。

$ sudo apt update
$ sudo apt upgrade
$ sudo reboot

※※↑OSが再起動されるから気をつけてね!※※

ふたたびnginx起動

$ docker run -d -p 8080:80 nginx

事象解消した。
つまり以下の状態になった。

  • ブラウザでアクセスできる
  • 外部環境からnmapたたくと、Webサーバー用のポート8080番がopen である

うーむ、詳細原因分からんまんまだが、まいっかー。

対処まとめ

暫定対処

iptablesの無効化

sudo ufw disable

恒久対処

パッケージの最新化

sudo apt update
sudo apt upgrade
sudo reboot

※※↑OSが再起動されるから気をつけてね!※※

コメント

タイトルとURLをコピーしました