Docker Toolbox-Localhost无法正常工作


100

所以我使用Docker Toolbox是因为我的机器上没有Hyper-V,因为它不是Windows 10专业版。一切似乎都正常,但是当我尝试使用浏览器时,0.0.0.0:80它总是返回我:无法访问此站点

但是,当我运行命令时:docker container ps我得到以下信息:0.0.0.0:80->80/tcp这意味着该地址应该工作。我搜索了stackoverflow和github问题。现在我被卡住了。

我想念什么吗?

谢谢马克

编辑:

使用docker-machine ip default返回我192.168.99.100。我在端口80上运行。除了地址成为容器ID之外,我仍然得到相同的结果:https://fd677edg12

我运行CMD命令是找到我的IPv4的:cmd /k ipconfig /all。将结果与端口放在一起,它将返回相同的内容:https://fd677edg12


1
0.0.0.0不是实际地址,这意味着该端口已绑定到所有Docker主机(您的Windows计算机)接口。尝试localhost:80或计算机具有的任何IP地址:80
fvu

@fvu我仍然收到“无法访问此站点”。我也尝试过,docker-machine default ip -> 192.168.99.100所以我把这个放在地址中:192.168.99.100:80我仍然得到同样的结果。
标记

1
如果您被重定向-是您的应用程序损坏了。假设
docker

Answers:


179

Docker Toolbox的便利性不如Windows的Docker,但由于您使用的是Home版本,因此使用它是正确的。

在Toolbox中,由于VirtualBox中运行的是Linux VM,因此默认情况下localhost不会是192.168.99.100

所以如果你跑 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文件是否包含任何内容(尽管我知道它不是本地主机)。我评论了那里的一切。
标记

经过几次尝试,我终于使它工作了。可悲的是,我不太清楚问题出在哪里。
标记

1
奖励信息:Docker Toolbox(在Windows 7、8、8.1和10 Home中使用)实际上只是围绕docker-machinecli的启动脚本。您可以docker-machine --help用来查看如何管理VirtualBox VM(或创建更多虚拟机)。
Bret Fisher

64

最初,在使用DockerToolBox和OracleVM VirtualBox时,在localhost:8080访问我的应用程序存在一些问题。

在VirtualBox中:

  1. 单击适当的机器(可能是标有“默认”的机器)
  2. 设定值
  3. 网络>适配器1>高级>端口转发
  4. 点击“ +”添加新规则
  5. 设置主机端口8080和访客端口8080;确保将主机IP和来宾IP保留为空

运行命令:

docker run -p 8080:8080 ${image_id}

由于在远程API上设置了CORS,因此我必须以localhost:8080运行。太好了,它是如此简单,谢谢!
phazei

1
惊人。到处都说无法做到,但是在这里。
superPhreshHackerKid

另外,请确保您不要将其他东西混入已经在此端口上侦听的内容,也不要与主机文件(C:\Windows\System32\drivers\etc\hosts)中的localhost / 127.0.0.1条目搞混了
msa

像魅力一样工作!
达吉·布兰克斯

43

我在https://docs.docker.com/docker-for-windows/#set-up-tab-completion-in-powershell中关注Docker for Windows教程时,在Web浏览器中测试Nginx时陷入了步骤#6 。似乎我遇到了类似的问题,因为我也使用Windows Home并且没有Hyper-V。我的解决方法很简单:

  1. 检查您的Docker IP默认值

$ docker-machine ip默认

192.168.99.100

  1. 转到Oracle Virtual Machine设置端口转发。确保网络设置为NAT,然后添加端口转发。主机IP:127.0.0.1,游客IP:192.168.99.100,端口都设置为80 这样的

  2. 在浏览器中再试一次,然后运行http:// localhosthttp://127.0.0.1(也可以添加端口80)。它应该运行。

事实是,nginx IP应该可以在docker虚拟机中访问,因此我们需要该端口forwading设置才能直接在主机的浏览器中访问它


2
我需要HOST:CONTAINER端口不同的情况,例如docker run --detach --publish 8081:80 --name webserver nginx。发现在这种情况下,我只需要转发HOST端口,即在VirtualBox设置中 Host IP=127.0.0.1Host Port=8081; Guest IP=192.168.99.100; Guest Port=8081,而不是80我以前想象的那样。在使用Docker Toolbox的Windows 7计算机中,Docker看起来像是从容器端口转发80192.168.99:8081我,还是从转发到192.168.99:8081localhost:8081因为192.168.99:8081它在Web浏览器中不显示任何内容。
and1er19年

您是
救生员

13

您可以localhost按照以下说明使用“ 192.168.99.100”代替:

步骤#01:

docker-machine ip default

您将看到默认IP

步骤#02:

docker-machine stop default

步骤#03:

  1. 打开VirtualBox Manager(从Windows中的启动程序中搜索VirtualBox Manager
  2. 选择您的Docker Machine VirtualBox映像(例如:默认)
  3. 打开设置->网络->高级->端口转发
  4. 添加您的应用名称,所需的主机端口和来宾端口 i.e, app name : nginx, host: 127.0.0.1, host port: 80, guest port: 80

步骤#04: 现在您可以通过执行以下操作来启动Docker Machine:

docker-machine start default

然后,只需启动您的Docker容器,您就可以通过localhost访问它。

在这里查看详细信息。


2

要映射期望的端口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映射的主机端口,而不是内部容器端口。您正在映射主机-> VM,然后Docker映射VM->容器。

请参阅VirtualBox文档


1

这是避免键入IP 192.168.99.100的另一种简单方法。转到C:\Windows\System32\drivers\etc\hosts并在文件末尾添加:

192.168.99.100 docker.awesome 或您喜欢的任何名称。

保存文件(您需要具有管理员权限,因此请确保右键单击该文件并以管理员身份运行,以便能够在编辑文件时进行保存)。

在这种情况下,请转到您选择的域名docker.awesome:8080,就可以了。


0

经过大量的试验,我得以获得此公告栏。

  1. 我使用的docker run命令-docker run -p 4680:8080 --name bb bulletinboard:1.0这里的4680是localhost端口号。8080是容器端口号,即容器将要监听的端口。Dockerfile中的EXPOSE命令中提到了此端口号。

  2. 然后,转到网络浏览器并输入192.168.99.100:4680

此处192.168.99.100是docker机器的IP地址(使用命令-> docker-machine ip)

  1. 之后,您的浏览器页面应打开至-

在此处输入图片说明

希望这对大家有帮助!!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.