运行Docker for Windows,暴露端口时出错

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了运行Docker for Windows,暴露端口时出错相关的知识,希望对你有一定的参考价值。

我知道有很多关于在Windows上运行Docker的问题,但是这个问题是关于在Windows上运行全新的Docker for Windows。 在我的情况下,我使用的是Windows 10 Pro 64位。根据该网站,应支持此版本。 我一直在按照我在这里找到的教程:https://prakhar.me/docker-curriculum/ 我当然也尝试遵循官方指南:https://docs.docker.com/docker-for-windows/

在这两个教程中,当尝试使用-P参数分配端口或尝试指定端口-p 8080:5000时,我得到相同的错误消息:

在官方指南中,我运行docker run -d -p 80:80 --name webserver nginx并得到:

C: Program Files Docker Docker Resources bin docker.exe:来自守护程序的错误响应:驱动程序无法在端点webserver上编程外部连接(f9946544e4c6ad2dd9cb8cbccd251e4d48254e86562bd8e6da75c3bd42c7e45a):启动userland代理时出错:mkdir /port/tcp:0.0.0.0: 80:tcp:172.17.0.2:80:输入/输出错误。

按照非官方指南,我运行docker run -p 8888:5000 prakhar1989/catnip并得到基本相同的错误:

C: Program Files Docker Docker Resources bin docker.exe:来自守护程序的错误响应:驱动程序在端点上编程外部连接失败focused_swartz(48a0c005779c6e89bf525ead2ecff44a7f092495cd22ef7d19973002963cb232):启动userland代理时出错:mkdir /port/tcp:0.0.0.0: 8888:tcp:172.17.0.2:5000:输入/输出错误。

如果我不尝试分配容器将运行的端口,但后来我不知道如何访问它。

我正在运行的docker版本:

  • Docker版本1.12.3,构建6b644ec`
  • docker-compose版本1.8.1,build 004ddae`
  • docker-machine.exe版本0.8.2,build e18a919`

任何帮助将非常感激。谢谢。

答案

这是由端口编号冲突引起的:github问题在这里https://github.com/docker/compose/issues/3277

基本上端口正在使用中!重置工作的原因是因为它擦除了其他映射。

另一答案

这是一个新的转折点。

最新的Windows 10更新(Fall Creators Update,2017)具有新的“功能”。它会自动启动您上次关闭时运行的所有应用程序。

这会重建Docker for Windows状态不佳。这使得看起来这些端口被其他东西使用 - 它本身就是鬼魂。这解释了为什么即使我停止/启动我的容器甚至重启,这些端口仍然在使用!

这种情况下的解决方案是简单地重启Docker守护进程。

要在下次关闭后防止这种情况,请不要使用关机按钮。改为输入:

shutdown /s /t 0

这绕过了新功能。

在这个帖子中查看Jason [MS]的答案:

https://answers.microsoft.com/en-us/insider/forum/insider_wintp-insider_perf-insiderplat_pc/programs-autostart-after-boot-in-windows-10-fall/09dd8d3e-7b36-45d1-9181-6587dd5d53ab

这是一个人的解决方法(从这个帖子的结尾 - 我自己没有尝试过):

http://www.icttoolbox.nl/info/stop-windows-10-creator-fall-reopening-programs-reboot/

另一答案

重新启动Docker守护进程暂时解决了这个问题,但为了摆脱它最终我不得不禁用Windows 10快速启动,这是@ biscuit314描述的功能。

要禁用Windows 10快速启动,请转到“控制面板”>“电源选项”>“选择电源按钮的操作”>“更改当前不可用的设置”>“取消选中”“启用快速启动(推荐)”和“保存更改”

Disable fast startup

另一答案

1)然后停止所有运行的容器docker stop $(docker ps -a -q)

2)停止机器上的Docker并重新启动它。

然后运行所需的命令。这将解决问题。

另一答案

如果它在Windows操作系统中,请重新启动Docker这已经解决了我的问题

另一答案

对于Linux - Debian用户,

只有当您知道是否要停止所有容器时才使用docker stop $(docker ps -a -q)....如果是,请运行docker rm $(docker ps -a -q)删除容器。 ...

然后停止docker守护进程 - systemctl stop docker然后启动docker守护进程--systemctl start docker

还要验证docker守护程序是否已启动 - 服务docker status

按照上述所有步骤后你应该没事.....

另一答案

尝试停止docker并在管理员模式下再次启动它。在管理员模式下启动后打开电源shell。因为错误说“mkdir”可能会解决你的问题。我不确定,但它对我有用。在使用-P的情况下,一旦-P将随机选择端口,端口冲突就不会成为错误的原因。它本身的错误对我来说不是很友好,但是因为我看到了mkdir字,我想象它可能是一个权限错误,这就是为什么我在管理员模式下重新启动docker并在管理员模式下启动power shell。

另一答案

我尝试了关于这个问题的所有建议:杀死所有容器,重新启动Docker Desktop,禁用“快速启动”,重新启动计算机,确保禁用“实验功能”。这些东西都不起作用。

我最终让它运行起来。以下是您可能想要尝试的一些事情(因为我不确定实际修复了什么)。

  1. 找到“Doc​​ker Desktop”并右键单击“以管理员身份运行...”
  2. 注意它抱怨的端口。有人说这可能只是Docker说“端口正在使用”的不友好方式。在我的情况下,端口是80.我在Windows Pro上进入服务并禁用“万维网发布服务”只是为了安全。

以上是关于运行Docker for Windows,暴露端口时出错的主要内容,如果未能解决你的问题,请参考以下文章

无法访问Docker Container的暴露端口

谷歌云防火墙暴露端口 Docker

似乎无法将 docker 容器端口暴露给主机

Gitlab CI runner 无法暴露嵌套 Docker 容器的端口

无法通过容器的 ip 和通过 http 暴露的端口访问 Docker 容器中的 Web 应用程序

Windows下Docker主机网络容器服务访问