iptablesコマンドを使用してポートを開いても、dockerで公開されているポートは外部からアクセスできません。

iptablesコマンドを使用してポートを開いても、dockerで公開されているポートは外部からアクセスできません。

Linuxベースのサーバーにサンプルのdocker tarイメージがあり、次のようにdocker runコマンドでイメージを実行しました。ここで、9521f101839fはイメージIDです。

docker run -p 0.0.0.0:9895:9898 -td 9521f101839f

Dockerコンテナが存在し、プロジェクト(残りのAPI)が私のサーバー内で正常に動作しています。

docker psコマンドの出力も正しく表示されます。

a97904cb07d1 localhost/elk-spring-boot.jar:latest 22 minutes ago Up 22 minutes ago 0.0.0.0:9895->9898/tcp compassionate_goldberg

ご覧のとおり、9895を外部の世界に公開します。

 iptables -I INPUT -p tcp -m tcp --dport 9895 -j ACCEPT

上記のiptablesコマンドを使用してポート9895を開きました。

[root@pxgrid-163 localdisk]# iptables -nvL | grep 9895
0 0 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:9895
1 60 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:9895
1 60 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:9895
0 0 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:9895
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:9895

ただし、他のLinuxベースのサーバー(またはラップトップCLI)からこのDockerコンテナサーバーにカールしようとすると、接続できません。 Dockerコンテナを保持しているサーバー内のすべてのものに正しくアクセスできます。しかし、別のサーバー(またはラップトップ)でCurlを実行してapi(docker run api)にアクセスしようとすると、アクセスできません。

これが予想される動作ですか?港が外部世界にさらされているので、外部からアクセス可能でなければならないのではないでしょうか。ここで何か抜けましたか?

以下は、ifconfigを実行したときに表示されるネットワークインタフェースの一覧です。

ここではどのインターフェイス_ipについて話していますか? eth0ですか? ifconfigを実行すると、多くのインタフェースが見えます。

ifconfig
cni-podman0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 10.88.0.1  netmask 255.255.0.0  broadcast 10.88.255.255

cni-podman1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 169.254.2.1  netmask 255.255.255.0  broadcast 169.254.2.255

cni-podman2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 169.254.4.1  netmask 255.255.255.0  broadcast 169.254.4.255

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.23.166.163  netmask 255.255.255.0  broadcast 172.23.166.255

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0        

veth506e78cf: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500 

veth6c80d69f: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        
vethe32079e7: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

ベストアンサー1

Dokerはあなたのコンピュータに独自のネットワーク172.16.0.0/12を持っています。

努力する

-p your_interface_ip:9895:9898

また、IP転送が有効になっていることを確認してください。

sysctl -w net.ipv4.ip_forward=1

https://docs.docker.com/config/containers/container-networking/

https://www.docker.com/blog/understanding-docker-networking-drivers-use-cases/

おすすめ記事