无法从主机连接到Docker容器中的静态网站

2022-01-22 05:00:12 标签 windowsdockernetworkingconnectionport

我已经看了几篇关于这个话题的文章,但还没有找到适合我的解决方案

https://forums。docker。com/t/how-can-i-navigate-to-container-website-from-host-browser/25035 < br / >

如何从主机访问Docker容器的web服务器

我遵循了本教程

https://tecadmin。net/tutorial/docker-run-static-website < br / >

docker容器从那个努力运行,当我执行到它,我可以成功地卷曲网站

从主机我不能连接到docker容器中的网站

我还不能发布截图,所以…

-----------------------------------------< br / >

我的主机是windows 10

我使用Oracle VirtualBox

码头工人版本返回

 Version:           19.03.1
 API version:       1.40
 Go version:        go1.12.7
 Git commit:        74b1e89e8a
 Built:             Wed Jul 31 15:18:18 2019
 OS/Arch:           windows/amd64
 Experimental:      false
Server: Docker Engine - Community
 Engine:
  Version:          19.03.12
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.13.10
  Git commit:       48a66213fe
  Built:            Mon Jun 22 15:49:35 2020
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          v1.2.13
  GitCommit:        7ad184331fa3e55e52b890ea95e65ba581ae3429
 runc:
  Version:          1.0.0-rc10
  GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dd
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683  

----------------------------------------

Dockerfile < br / >

-----------------------------------------

COPY . /usr/share/nginx/html
EXPOSE 127.0.0.1:8080

-----------------------------------------

Docker构建命令使用

-----------------------------------------< br / >

Docker build -t img-static-site-example 。

-----------------------------------------< br / >

Docker运行命令使用

-----------------------------------------< br / >

Docker执行-it -d -p 127。0。0。1:8080:80 img-static-site-example

-----------------------------------------< br / >

卷曲检查

------------------------------------------< br / >

下面的所有操作都不需要从主机执行

curl http://172.17.0.3
curl http://172.17.0.3:8080
curl http://localhost:8080
curl http://192.168.99.102
curl http://192.168.99.102:80
curl http://192.168.99.102:8080
curl http://192.168.99.102:2376

----------------------------------------

Docker-machine IP返回192。168。99。102

-----------------------------------------

        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "43d2a1e8e8429e48b5dde91385d5933e2fa095d868b67f1d6ed59a1aca1e1665",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {
                "80/tcp": [
                    {
                        "HostIp": "127.0.0.1",
                        "HostPort": "8080"
                    }
                ],
                "8080/tcp": null
            },
            "SandboxKey": "/var/run/docker/netns/43d2a1e8e842",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "530b098a8d01838fa4e408033a905a3f9f8b8c538a8cefa13a937b24ff325136",
            "Gateway": "172.17.0.1",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "172.17.0.3",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
            "MacAddress": "02:42:ac:11:00:03",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "2436a76997d6a454900798af80bf6c35482397acd66a44a07e411d6617e56339",
                    "EndpointID": "530b098a8d01838fa4e408033a905a3f9f8b8c538a8cefa13a937b24ff325136",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.3",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:03",
                    "DriverOpts": null
                }
            }

###你似乎正在使用基于Docker工具箱或Docker机器的设置。它们运行一个专用的Linux VM来运行Linux容器(你在问题中提到了VirtualBox)。在这个设置中,Docker的几个网络选项不能像你在本地linux系统中所期望的那样工作。可以使用--network host for example but it will use the VM's host network and not the containing system.

例如,它将使用虚拟机的主机网络,而不是包含系统。

特别是在这个环境中,docker运行-p 127。0。0。1:…option启动一个容器,发布绑定到虚拟机的本地主机接口的端口。这与包含主机的本地主机接口和任何单个容器的本地主机概念是分开的。这也意味着,发布的端口将只能从Docker VM本身访问,而不能从其他任何地方访问;宿主无法触及它。

在这个设置中,你需要:

删除127.0.0.1 from t从docker run -p option; <选择;docker run -p 8080:80 .....

连接到docker-machine ip address and th地址和第一个docker run -p port number; htt端口号;http://192.168.99.102:8080..

这些约束是特定于Docker Machine/Docker Toolbox的。在本地Linux主机或使用Docker Desktop应用程序,您可以使用localhost,如您所述。

docker inspect IP地址在几乎所有这些设置中都是不可达的(它只在本地Linux上从同一主机工作),而且你几乎不需要查找它。

阅读全文

▼ 版权说明

相关文章也很精彩
推荐内容
更多标签
相关热门
全站排行
随便看看

错说 cuoshuo.com —— 程序员的报错记录

部分内容根据CC版权协议转载;网站内容仅供参考,生产环境使用务必查阅官方文档

辽ICP备19011660号-5

×

扫码关注公众号:职场神器
发送: 1
获取永久解锁本站全部文章的验证码