[英]Docker on Windows: how to connect to container from host using container IP?
[英]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 本身訪問,而不能從其他任何地方訪問; 包含主機無法訪問它。
在此設置中,您需要:
docker run -p
選項中刪除127.0.0.1
; docker run -p 8080:80...
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.