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.1Host 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 工具箱中的本地主机上不可用

使用pipework将Docker容器桥接到本地网络环境中

云原生之Docker实战使用Docker部署Trilium个人笔记工具

云原生之Docker实战使用Docker部署Duplicati备份工具

云原生之Docker实战使用Docker部署Focalboard项目管理工具