正在运行Docker for Windows,公开端口时出错

正在运行Docker for Windows,公开端口时出错,docker,docker-for-windows,Docker,Docker For Windows,我知道在windows上运行Docker有很多问题,但是这个问题是关于在windows上运行全新的Docker for windows。 就我而言,我使用的是64位Windows 10 Pro。根据网站要求,应支持此版本。 我一直在遵循我在这里找到的教程: 当然,我也试着遵循官方指南: 在这两个教程中,当尝试使用-p参数分配端口或尝试指定端口-p 8080:5000时,我都会收到相同的错误消息: 在官方指南中,我运行docker run-d-p80:80——命名webserver nginx,

我知道在windows上运行Docker有很多问题,但是这个问题是关于在windows上运行全新的Docker for windows。
就我而言,我使用的是64位Windows 10 Pro。根据网站要求,应支持此版本。
我一直在遵循我在这里找到的教程:
当然,我也试着遵循官方指南:

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

在官方指南中,我运行
docker run-d-p80:80——命名webserver nginx
,并获得:

C:\Program Files\Docker\Docker\Resources\bin\Docker.exe:守护进程的错误响应:驱动程序未能在端点Web服务器上对外部连接进行编程(F9946544E4C6AD2DD9CB8CBCCD251E4D4825E86562BD8E6DA75C3BD42C7E45A):启动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:守护进程的错误响应:驱动程序未能在以端点为中心的\u swartz上编程外部连接(48a0c005779c6e89bf525ead2ecff44a7f092495cd22ef7d19973002963cb232):启动userland代理时出错:mkdir/port/tcp:0.0.0:8888:tcp:172.17.0.2:5000:输入/输出错误

如果我不尝试分配一个端口,容器将运行,但我不知道如何访问它

我正在运行的docker版本:

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

任何帮助都将不胜感激。谢谢。

这是由端口编号冲突引起的:此处是github问题

基本上,端口正在使用中!重置之所以有效,是因为它删除了其他映射。

这里有一个新的转折点

上一次Windows 10更新(2017年秋季创建者更新)有一个新的“功能”。它会自动启动上次关机时正在运行的所有应用程序

这将使Docker for Windows重新处于错误状态。这使得这些端口似乎被其他东西使用了——这是它自己的幽灵。这解释了为什么即使我停止/启动容器,甚至重新启动,这些端口仍在使用中

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

为了防止下次关机后出现这种情况,请不要使用关机按钮。请键入以下内容:

shutdown /s /t 0
这绕过了新功能

请参见本帖中Jason[MS]的答案:

这里有一个家伙的解决方法(从这个线程的末尾-我自己还没有尝试过):

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

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


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

重新启动Docker守护进程暂时解决了此问题,但为了最终解决此问题,我必须禁用Windows 10快速启动功能,这是@314描述的功能

要禁用Windows 10快速启动,请进入控制面板>电源选项>选择电源按钮的功能>更改当前不可用的设置>取消选中打开快速启动(推荐),然后单击保存更改


对于Linux-Debian用户

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

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

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


完成上述所有步骤后,您应该会没事的。…

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

如果是在windows操作系统中,请确实重新启动docker
这为我解决了这个问题

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

我终于让它运行起来了。下面是一些你可能想尝试的东西(因为我不确定到底是什么修复了它)

  • 找到“Docker桌面”,右键单击“以管理员身份运行…”
  • 注意它抱怨的港口。有人说这可能只是Docker说“该港口正在使用”的不友好方式。在我的例子中,该港口是80。为了安全起见,我进入了Windows Pro上的服务并禁用了“万维网发布服务”

  • 我以前在10号窗口也遇到过同样的问题。
    重新启动docker,如果您在Visual Studio 2019中遇到此问题,它将起作用:

    根据,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
        }
    
    “Docker”:{
    “commandName”:“Docker”,
    “启动浏览器”:正确,
    “launchUrl”:“{Scheme}://{Servic”