Docker工具箱-本地主机无法运行

111
我正在使用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。但我仍然得到相同的结果。 - Mark
1
如果你被重定向了——那是你的应用程序出了问题。假设Docker在同一台计算机上运行,你应该能够访问http://localhost:80/。 - user2105103
7个回答

188

Docker Toolbox不能像Docker for Windows那样拥有许多便利功能,但是由于您使用的是Home版,所以选择使用它是正确的。

在Toolbox中,没有任何东西是localhost,默认情况下会是192.168.99.100,因为它在VirtualBox中运行Linux VM。

所以如果你运行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 文件中是否有任何内容(尽管我知道它不是本地主机)。我已经将其中的所有内容都注释掉了。 - Mark
经过几次尝试,我终于让它工作了。可悲的是,我不太确定问题出在哪里。 - Mark
2
额外信息:Docker Toolbox(用于Windows 7、8、8.1和10 Home)实际上只是一个包装在docker-machine cli周围的启动脚本。您可以使用docker-machine --help查看您可以执行哪些操作来管理VirtualBox VM(或创建更多)。 - Bret Fisher

67

在使用DockerToolBox和OracleVM VirtualBox时,我最初在访问本地主机的Applications (localhost: 8080)方面遇到了一些问题。

在VirtualBox中:

  1. 点击相应的虚拟机(可能是标记为“default”的虚拟机)
  2. 设置
  3. 网络 > 适配器1 > 高级 > 端口转发
  4. 点击“+”添加一个新规则
  5. 设置主机端口 8080 和客户端口 8080;请确保留下主机IP和客户IP为空

运行以下命令:

docker run -p 8080:8080 ${image_id}

由于远程API上的CORS设置,我必须作为localhost:8080运行。太好了,这么简单,谢谢! - phazei
另外,请确保您不要与已经在此端口上侦听或主机文件(C:\ Windows \ System32 \ drivers \ etc \ hosts)中的localhost / 127.0.0.1条目混淆其他内容 - 在它正常工作之前,我必须检查两者;-) - msa

47
我在https://docs.docker.com/docker-for-windows/#set-up-tab-completion-in-powershell中遵循Docker for Windows教程,但在第六步测试Nginx时卡住了。看起来我遇到了类似的问题,因为我也使用Windows Home而没有Hyper-V。我的解决方法非常简单:
  1. 检查默认docker IP:

$ docker-machine ip default

192.168.99.100

  1. 前往Oracle虚拟机进行端口转发设置。确保网络设置为NAT,并添加端口转发。主机IP:127.0.0.1,客户IP:192.168.99.100,所有端口设置为80,就像这样

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

Nginx IP地址只能在docker虚拟机内部访问,因此我们需要进行端口转发设置,以便在主机机器的浏览器中直接访问它。


2
我需要处理HOST:CONTAINER端口不同的情况,例如:docker run --detach --publish 8081:80 --name webserver nginx。发现在这种情况下,我只需要转发HOST端口,在VirtualBox设置中,即: 主机IP=127.0.0.1; 主机端口=8081; 客户机IP=192.168.99.100; 客户机端口=8081, 而不是像之前我想的那样使用端口 80。看起来在我的Windows 7机器上使用Docker Toolbox时,Docker会将容器端口80转发到192.168.99:8081,而我则从192.168.99:8081转发到localhost:8081,因为在Web浏览器中打开192.168.99:8081显示为空。 - and1er

14
你可以按照以下步骤,使用localhost代替'192.168.99.100':

步骤 #01:

docker-machine ip default

您将看到默认的IP地址

步骤#02:

docker-machine stop default

步骤 #03:

  1. 打开VirtualBox Manager(从开始菜单中搜索VirtualBox Manager
  2. 选择您的Docker Machine VirtualBox映像(例如:默认值)
  3. 打开“设置”->“网络”->“高级”->“端口转发”
  4. 添加您的应用程序名称,所需的主机端口和客户端口
    例如,应用程序名称: nginx, 主机: 127.0.0.1, 主机端口: 80, 客户端端口: 80

步骤 #04:

现在您可以执行以下操作来启动Docker Machine了:
docker-machine start default

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

点击此处查看详情。


2

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

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

保存文件(你需要管理员权限,所以请确保右键单击文件并以管理员身份运行才能在编辑时保存它)。

现在你可以通过所选的域名 docker.awesome:8080 访问了。


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文档。最初的回答。

0

经过许多尝试,我终于能够获得这个公告栏。

  1. 我使用的docker run命令是- docker run -p 4680:8080 --name bb bulletinboard:1.0 这里,4680是本地主机端口号。 8080是容器端口号,容器将在该端口上侦听。此端口号在Dockerfile中的EXPOSE命令中指定。

  2. 然后,打开Web浏览器,键入192.168.99.100:4680

这里,192.168.99.100是docker机器IP地址(使用命令-> docker-machine ip)

  1. 完成以上步骤后,应在您的浏览器页面上打开-

enter image description here

希望这能对大家有所帮助!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接