Docker 工具箱 - 本地主机不工作
Posted
技术标签:
【中文标题】Docker 工具箱 - 本地主机不工作【英文标题】:Docker Toolbox - Localhost not working 【发布时间】:2017-08-09 12:17:54 【问题描述】:所以我使用 Docker Toolbox 是因为我的机器上没有 Hyper-V,因为它不是 Windows 10 专业版。一切似乎都正常,但是当我尝试在浏览器上打开 0.0.0.0:80
时,它总是返回我:无法访问此站点
但是当我运行命令时:docker container ps
我得到以下信息:0.0.0.0:80->80/tcp
意味着这个地址应该可以工作。我搜索了***和github问题。现在我被困住了。
我错过了什么吗?
谢谢, 标记
编辑:
使用docker-machine ip default
会返回192.168.99.100
。我在端口 80 上运行它。我仍然得到相同的结果,只是地址变成了容器 id:https://fd677edg12
我在 cmd 上运行该命令以查找我的 ipv4:cmd /k ipconfig /all
。将结果与端口放在一起,它会返回相同的内容:https://fd677edg12
【问题讨论】:
0.0.0.0 不是实际地址,这意味着该端口已绑定到所有 docker 的主机(您的 windows 计算机)接口。尝试 localhost:80 或您计算机的任何 IP 地址:80 @fvu 我仍然收到“无法访问此站点”。我也试过docker-machine default ip -> 192.168.99.100
所以我把这个放在地址里:192.168.99.100:80
我仍然得到同样的结果。
如果你被重定向——那是你的应用坏了。假设 docker 在同一台计算机上运行,你应该可以localhost:80
【参考方案1】:
Docker Toolbox 没有 Docker for Windows 提供那么多便利,但您使用它是正确的,因为您使用的是家庭版。
在 Toolbox 中,什么都不会是 localhost
,默认情况下会是 192.168.99.100
,因为它在 VirtualBox 中运行 Linux 虚拟机。
所以如果你运行docker run -p 80:80 nginx
(请注意,我必须为192.168.99.100
发布一个端口才能监听该端口)
然后转到http://192.168.99.100
应该可以。
【讨论】:
感谢您的回复。除了添加docker run -p 80:80 -d nginx
,我正在按照您的步骤操作。我转到该地址,它会将我重定向到https://dev/
,它再次表示无法访问该站点。我还想验证我是否有任何东西是hosts
文件(尽管我知道它不是本地主机)。我评论了那里的所有内容。
经过几次尝试,我终于成功了。可悲的是,我不太确定问题出在哪里。
额外信息:Docker 工具箱(用于 Windows 7、8、8.1 和 10 Home)实际上只是一个围绕 docker-machine
cli 的启动脚本。您可以使用docker-machine --help
来查看您可以做些什么来管理 VirtualBox 虚拟机(或创建更多虚拟机)。【参考方案2】:
我最初在使用 DockerToolBox 和 OracleVM VirtualBox 时在 localhost:8080 访问我的应用程序时遇到了一些问题。
在 VirtualBox 中:
-
点击相应的机器(可能是标有“默认”的机器)
设置
网络 > 适配器 1 > 高级 > 端口转发
点击“+”添加新规则
设置主机端口
8080
& 访客端口8080
;请务必将主机 IP 和访客 IP 留空
运行命令:
docker run -p 8080:8080 $image_id
【讨论】:
由于远程 API 上的 CORS 设置,我必须以 localhost:8080 身份运行。太棒了,太简单了,谢谢! 另外,请确保您不会与已经在此端口上侦听的其他内容或主机文件中的 localhost/127.0.0.1 条目(C:\Windows\System32\drivers\etc\hosts
)混淆 - 我必须同时进入在它对我有用之前检查一下;-)【参考方案3】:
我在https://docs.docker.com/docker-for-windows/#set-up-tab-completion-in-powershell 中关注 docker for windows 教程,但在 Web 浏览器中测试 nginx 时卡在了第 6 步。似乎我也遇到了类似的问题,因为我也使用 Windows Home 并且没有 Hyper-V。我的解决方法很简单:
-
检查您的 docker IP 默认值
$ docker-machine ip 默认
192.168.99.100
转到 Oracle 虚拟机以设置端口转发。确保网络设置为 NAT,并添加端口转发。 Host IP:127.0.0.1,Guest IP:192.168.99.100,端口全部设置为80 like this
再次尝试在浏览器中运行http://localhost 或http://127.0.0.1(也可以添加端口80)。它应该运行。
问题是 nginx IP 可以在 docker 虚拟机中访问,因此我们需要该端口转发设置才能直接在主机浏览器中访问它
【讨论】:
当HOST:CONTAINER
端口不同时,我需要一个案例,例如docker run --detach --publish 8081:80 --name webserver nginx
。发现在这种情况下我只需要转发HOST
端口,即在VirtualBox 设置中Host IP=127.0.0.1
; Host Port=8081
; Guest IP=192.168.99.100
; Guest Port=8081
,而不是我之前想象的 80
。看起来在我的带有 Docker Toolbox 的 Windows 7 机器中,Docker 从容器端口 80
转发到 192.168.99:8081
,我从 192.168.99:8081
转发到 localhost:8081
,因为 192.168.99:8081
在 Web 浏览器中没有显示任何内容。【参考方案4】:
您可以按照说明使用localhost
代替“192.168.99.100”:
步骤#01:
docker-machine ip default
您将看到默认 IP
步骤#02:
docker-machine stop default
步骤#03:
-
打开VirtualBox Manager(在windows的启动程序中搜索
VirtualBox Manager
)
选择您的 Docker Machine VirtualBox 映像(例如:默认)
打开设置->网络->高级->端口转发
添加您的应用名称、所需的主机端口和您的访客端口
i.e, app name : nginx, host: 127.0.0.1, host port: 80, guest port: 80
步骤#04: 现在您已准备好通过执行以下命令来启动您的 Docker 机器:
docker-machine start default
然后只需启动您的 Docker 容器,您就可以通过 localhost 访问它。
Have a look here了解详情。
【讨论】:
【参考方案5】:要将预期的端口映射到 localhost
而不是直接访问 docker-machine IP,您可以使用 VirtualBox CLI。
如果 docker-machine VM(这里称为default
)正在运行,添加和删除规则如下:
> VBoxManage.exe controlvm "default" natpf1 "nginx,tcp,,8888,,8888"
> VBoxManage.exe controlvm "default" natpf1 delete nginx
如果虚拟机没有运行,或者您想在更改之前停止:
> docker-machine stop
> VBoxManage.exe modifyvm "default" --natpf1 "nginx,tcp,,8888,,8888"
> VBoxManage.exe modifyvm "default" --natpf1 delete "nginx"
> docker-machine start
其中端口转发规则的格式为[<name>],tcp|udp,[<hostip>],<hostport>,[<guestip>], <guestport>
。
请注意,在 VirtualBox 中,您要映射到 Docker 映射的 host 端口,而不是内部容器端口。您正在映射主机 -> 虚拟机,然后 Docker 映射虚拟机 -> 容器。
请参阅VirtualBox docs。
【讨论】:
【参考方案6】:这是避免输入 ip 192.168.99.100 的另一种简单方法。
转到C:\Windows\System32\drivers\etc\hosts
并在文件末尾添加:
192.168.99.100 docker.awesome
或您喜欢的任何名称。
保存文件(您需要具有管理员权限,因此请确保您右键单击该文件并以管理员身份运行,以便在您编辑它时能够保存它)。
转到您选择的域名,在本例中为 docker.awesome:8080,您就拥有了。
【讨论】:
【参考方案7】:经过多次尝试,我得到了这个公告板。
我使用的docker run命令——docker run -p 4680:8080 --name bb bulletinboard:1.0 这里,4680 是本地主机端口号。 8080 是容器端口号,容器将监听的端口。此端口号在 Dockerfile 的 EXPOSE 命令中提及。
然后,进入网络浏览器并输入 192.168.99.100:4680
这里,192.168.99.100是docker机器IP地址(使用命令->docker-machine ip)
-
之后,您的浏览器页面应打开至 -
希望对大家有帮助!!
【讨论】:
以上是关于Docker 工具箱 - 本地主机不工作的主要内容,如果未能解决你的问题,请参考以下文章
无法从本地主机连接到 Docker 中的 MySQL(Docker for Mac beta)
容器在 Windows Docker 工具箱中的本地主机上不可用
云原生之Docker实战使用Docker部署Trilium个人笔记工具