运行Docker for Windows,暴露端口

时间:2016-11-18 03:31:06

标签: docker 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,build 6b644ec`
  • docker-compose版本1.8.1,构建004ddae`
  • docker-machine.exe版本0.8.2,构建e18a919`

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

10 个答案:

答案 0 :(得分:56)

这是一个新的转折。

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

答案 1 :(得分:27)

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

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

Disable fast startup

答案 2 :(得分:12)

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

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

答案 3 :(得分:6)

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

2)停止机器上的Docker&重启它。

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

答案 4 :(得分:1)

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

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

还要验证docker守护进程是否已启动-服务docker状态

按照上述所有步骤操作后,您应该会很好.....

答案 5 :(得分:1)

如果它在Windows OS中,请重新启动Docker 这为我解决了这个问题

答案 6 :(得分:0)

尝试停止docker,然后在管理员模式下再次启动它。启动后,也请以管理员模式打开电源外壳。 因为错误说“ mkdir”,也许这可以解决您的问题。我不确定,但是对我有用。 在使用-P的情况下,一旦-P将随机选择端口,则不会将端口冲突视为错误的原因。它本身的错误对我不太友好,但是因为我看到它上面的mkdir字,所以我以为它可能是权限错误,这就是为什么我以管理员模式重新启动docker并以管理员模式启动power shell的原因。

答案 7 :(得分:0)

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

我最终使它运行了。您可能想尝试一下一些方法(因为我不确定实际上是什么修复方法。)

  1. 找到“ Docker Desktop”并右键单击“以管理员身份运行...”
  2. 请注意它抱怨的端口。有人说这可能只是Docker不友好的说法:“该端口正在使用中”。就我而言,端口是80。为了安全起见,我进入Windows Pro上的服务并禁用了“万维网发布服务”。

答案 8 :(得分:0)

在窗口10上我之前遇到了同样的问题。 重新启动docker,就可以了

答案 9 :(得分:0)

如果因为在Visual Studio 2019中遇到此问题而在这里:

根据this post,VS团队正在为16.5版本中的该问题准备修复程序,同时,您可以在launchSettings.json中添加属性"publishAllPorts": true,例如:

"Docker": {
      "commandName": "Docker",
      "launchBrowser": true,
      "launchUrl": "{Scheme}://{ServiceHost}:44374", #<== Set a fixed port
      "environmentVariables": {
        "ASPNETCORE_URLS": "https://+:44374;https://+:5000",
        "ASPNETCORE_HTTPS_PORT": "44374"
      },
      "publishAllPorts": true, #<== This is equivalent to the -P flag in 'docker run'
      "useSSL": true
    }

请注意,未定义属性"httpPort": XYZT。对其进行定义将使解决方法不起作用。

此设置对我有用:

  • 具有快速启动 关闭
  • 的Windows 10 1709 Build 16299.1747
  • Docker Desktop 2.2.05(43884)
  • Docker Engine 19.03.8
  • Visual Studio 2019企业版16.5.4。
  • Microsoft.VisualStudio.Azure.Containers.Tools.Targets 1.10.8

我意识到VS正在创建命令,两次包含-p参数,一个使用我指定的端口,另一个使用端口80,例如:-p 3010:80 -p 3010:3010

添加publishAllPorts之后,它现在创建了容器,我可以对其进行远程调试。