簡體   English   中英

無法從主機連接到 Docker 容器中的 static 網站

[英]Can't connect to static website in Docker container from host

我已經查看了有關此主題的幾篇文章,但還沒有找到適合我的解決方案
https://forums.docker.com/t/how-can-i-navigate-to-container-website-from-host-browser/25035
如何從主機訪問 Docker 容器的 web 服務器

無法從主機連接到 Docker 容器中的 static 網站。
我已經按照這個教程
https://tecadmin.net/tutorial/docker-run-static-website
來自該工作的 docker 容器運行,當我執行到它時,我可以 curl 從主機成功地訪問網站我無法連接到 docker 容器中的網站

我還不能發截圖,所以...
-----------------------------------------
我的主機是 windows 10
我正在使用 Oracle VirtualBox
docker版本回歸

 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
-----------------------------------------

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

-----------------------------------------
使用 Docker 構建命令
-----------------------------------------
docker 構建-t img-static-site-example。
-----------------------------------------
使用 Docker 運行命令
-----------------------------------------
docker 運行 -it -d -p 127.0.0.1:8080:80 img-static-site-example
-----------------------------------------
curl 檢查
------------------------------------------
主機的以下操作均無效

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 Toolbox 或 Docker Machine 的設置。 這些運行專用的 Linux VM 來運行 Linux 容器(您在問題中提到了 VirtualBox)。 在此設置中,一些 Docker 網絡選項在本機 Linux 系統上無法正常工作。 例如,您可以使用--network host啟動容器,但它將使用 VM 的主機網絡而不是包含系統。

特別是,在這種環境中, docker run -p 127.0.0.1:...選項啟動一個容器,該容器發布一個綁定到 VM 的 localhost 接口的端口。 這與包含主機的 localhost 接口和任何單個容器的 localhost 概念是分開的。 這也意味着發布的端口只能從 Docker VM 本身訪問,而不能從其他任何地方訪問; 包含主機無法訪問它。

在此設置中,您需要:

  1. docker run -p選項中刪除127.0.0.1 docker run -p 8080:80...
  2. 連接docker-machine ip地址和第一個docker run -p端口號; http://192.168.99.102:8080

這些約束特定於 Docker Machine/Docker Toolbox。 在本機 Linux 主機或使用 Docker 桌面應用程序上,您可以按照您的描述使用localhost

docker inspect IP 地址在幾乎所有這些設置中都無法訪問(它僅適用於本機 Linux 上的同一主機),您幾乎不需要查找它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM