Docker 工具箱 - 本地主机不工作

Docker Toolbox - Localhost not working

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

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

我错过了什么吗?

谢谢, 马克

编辑:

使用 docker-machine ip default returns 我 192.168.99.100。我 运行 在端口 80 上。我仍然得到相同的结果,只是地址变成了容器 ID:https://fd677edg12

我 运行 在 cmd 上使用该命令查找我的 ipv4:cmd /k ipconfig /all。将结果与端口放在一起 returns 同样的事情:https://fd677edg12

Docker Toolbox 在 Windows 中没有 Docker 方便,但您使用它是正确的,因为您使用的是家庭版。

在 Toolbox 中,没有任何东西会 localhost,默认情况下会 192.168.99.100,因为它 运行在 VirtualBox 中安装了一个 Linux 虚拟机。

所以如果你 运行 docker run -p 80:80 nginx

(注意我必须为 192.168.99.100 发布一个端口来监听那个端口)

然后去 http://192.168.99.100 应该可以。

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

在 VirtualBox 中:

  1. 单击相应的机器(可能是标有 "default" 的机器)
  2. 设置
  3. 网络 > 适配器 1 > 高级 > 端口转发
  4. 点击“+”添加新规则
  5. 设置主机端口 8080 和访客端口 8080;请务必将主机 IP 和来宾 IP 留空

运行命令:

docker run -p 8080:8080 ${image_id}

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

  1. 检查您的 docker IP 默认值

$ docker-machine ip default

192.168.99.100

  1. 进入Oracle虚拟机设置端口转发。确保网络设置为 NAT,并添加端口转发。 Host IP:127.0.0.1,Guest IP:192.168.99.100,端口全部设置为80 like this

  2. 再试一次您的浏览器和 运行 http://localhost or http://127.0.0.1(也可以添加端口 80)。它应该 运行.

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

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

步骤#01:

docker-machine ip default

您将看到默认 IP

步骤#02:

docker-machine stop default

步骤#03:

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

步骤#04: 现在您已准备好通过执行以下命令启动您的 Docker 机器:

docker-machine start default

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

Have a look here 了解详情。

要将预期的端口映射到 localhost 而不是直接访问 docker-机器 IP,您可以使用 VirtualBox CLI。

如果docker-machine VM(此处称为default)是运行,添加和删除规则如下:

> VBoxManage.exe controlvm "default" natpf1 "nginx,tcp,,8888,,8888"
> VBoxManage.exe controlvm "default" natpf1 delete nginx

如果 VM 不是 运行,或者您想在更改它之前停止:

> 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

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

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

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

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

经过多次尝试,我得到了这个公告板。

  1. 我用的docker运行命令-docker运行-p4680:8080--name bbbulletinboard:1.0 这里,4680 是本地主机端口号。 8080 是容器端口号,容器将监听的端口。 Dockerfile 中的 EXPOSE 命令中提到了此端口号。

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

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

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

希望对大家有所帮助!!