Docker は localhost:8080 および 127.0.0.1:8080 経由ではアクセス可能だが、IP 経由ではアクセスできない

Docker は localhost:8080 および 127.0.0.1:8080 経由ではアクセス可能だが、IP 経由ではアクセスできない

以下のシナリオがあります - 3 つの Vagrant VM が以下の Vagrantfile からスピンされ、稼働しています (Oracle VirtualBox 内で表示されます)。

私はdocker1にログオンしており、ネットワークタイプは「NAT」で、ポート転送が使用されています(ゲスト:8080、ホスト:8080)。

localhost:8080、127.0.0.1:8080、127.0.1.1:8080 からページにアクセスできます。ただし、IP 経由ではアクセスできません (192.168.99.101:8080 は「応答に時間がかかりすぎています」と表示され、アクセスできません)。

Vagrant.configure("2") do |config|

    config.vm.define "docker1" do |docker1|
        docker1.vm.box="xxx/centos-stream-8"
        docker1.vm.hostname = "docker1.do1.lab"
        docker1.vm.network "private_network", ip: "192.168.99.101"
        docker1.vm.provision "shell", path: "docker-setup.sh"
        docker1.vm.provision "shell", path: "other-steps.sh"
        docker1.vm.provider :virtualbox do |vb|
            vb.customize ["modifyvm", :id, "--memory", "1536"]
        end
    end
    
    config.vm.define "docker2" do |docker2|
        docker2.vm.box="xxx/centos-stream-8"
        docker2.vm.hostname = "docker2.do1.lab"
        docker2.vm.network "private_network", ip: "192.168.99.102"
        docker2.vm.provision "shell", path: "docker-setup.sh"
        docker2.vm.provision "shell", path: "other-steps.sh"
        docker2.vm.provider :virtualbox do |vb|
            vb.customize ["modifyvm", :id, "--memory", "1536"]
        end
    end
    
    config.vm.define "docker3" do |docker3|
        docker3.vm.box="xxx/centos-stream-8"
        docker3.vm.hostname = "docker3.do1.lab"
        docker3.vm.network "private_network", ip: "192.168.99.103"
        docker3.vm.provision "shell", path: "docker-setup.sh"
        docker3.vm.provision "shell", path: "other-steps.sh"
        docker3.vm.provider :virtualbox do |vb|
            vb.customize ["modifyvm", :id, "--memory", "1536"]
        end
    end
end

docker-setup.sh ファイルは以下のとおりです。

#!/bin/bash

echo "* Add Docker repository ..."
dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

echo "* Install Docker ..."
dnf install -y docker-ce docker-ce-cli containerd.io

echo "* Enable and start Docker ..."
systemctl enable docker
systemctl start docker

echo "* Add vagrant user to docker group ..."
usermod -aG docker vagrant

other-steps.sh ファイルは以下のとおりです。

#!/bin/bash

echo "* Add hosts ..."
echo "192.168.99.101 docker1.do1.lab docker1" >> /etc/hosts
echo "192.168.99.102 docker2.do1.lab docker2" >> /etc/hosts
echo "192.168.99.103 docker3.do1.lab docker3" >> /etc/hosts

echo "* Install Additional Packages ..."
dnf install -y jq tree git nano

echo "* Firewall - swarm - open ports ..."
firewall-cmd --add-port=2377/tcp --permanent
firewall-cmd --add-port=4789/udp --permanent
firewall-cmd --add-port=7946/tcp --permanent
firewall-cmd --add-port=7946/udp --permanent

echo "* Firewall - app - open port 8080 ..."
firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --reload

ネットワークは以下の通りです。

[vagrant@docker1 etc]$ docker network ls
NETWORK ID     NAME              DRIVER    SCOPE
f2351cd29061   bridge            bridge    local
f91a21d83931   docker_gwbridge   bridge    local
c5fc9aedf330   host              host      local
oc2i4c2czira   ingress           overlay   swarm
50fe2b72573c   none              null      local

etc/hosts の内容は次の通りです:

[vagrant@docker1 etc]$ cat hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
127.0.1.1 docker1.do1.lab docker1
192.168.99.101 docker1.do1.lab docker1
192.168.99.102 docker2.do1.lab docker2
192.168.99.103 docker3.do1.lab docker3

コンテナを起動するために使用されるコマンドは以下のとおりです。

docker container run -d --name web -p 8080:80 -e APP_MODE='test' swarm-app

同じ問題に関する記事を大量に調べましたが、まだ解決策が見つかりません。これは、問題の IP アドレスの DNS 解決と関係があるのではないでしょうか。

更新: 以下のアドレス (ポート転送ホスト:8080、ゲスト:80) を CMD で curl 経由で開いています。提供できる情報がある場合はお知らせください。 `[vagrant@docker1 ~]$ curl http:/localhost:8080-> ブラウザで開きません

こんにちは、Docker Swarm!

テストモードで実行しています。

提供元:翻訳:

[vagrant@docker1 ~]$ カールhttp://172.17.0.2:80 -> これはコンテナのIPです - ブラウザからは開きません

こんにちは、Docker Swarm!

テストモードで実行しています。

提供元:翻訳:

[vagrant@docker1 ~]$ カールhttp://192.168.99.101:8080 -> これはブラウザから開くはずのDockerホストIPですが、これも成功しませんでした

こんにちは、Docker Swarm!

テストモードで実行しています。

提供元:翻訳:`

関連情報