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/