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

问题描述 投票:39回答:8

我知道有很多关于在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`

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

docker docker-for-windows
8个回答
12
投票

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

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


62
投票

这是一个新的转折点。

最新的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/


40
投票

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

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

Disable fast startup


7
投票

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

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

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


3
投票

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


2
投票

对于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

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


0
投票

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


0
投票

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

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

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