66

我知道有很多关于在 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:来自守护进程的错误响应:驱动程序在端点网络服务器上编程外部连接失败(f9946544e4c6ad2dd9cb8cbccd251e4d48254e86562bd8e6da75c3bd42c7e45a):启动用户级代理时出错: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)上编程外部连接失败:启动用户级代理时出错: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,构建 004ddae`
  • docker-machine.exe 版本 0.8.2,构建 e18a919`

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

4

11 回答 11

76

这是一个新的转折。

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

于 2017-12-14T17:02:20.307 回答
59

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

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

禁用快速启动

于 2018-03-29T20:25:08.243 回答
13

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

本质上该端口正在使用中!重置起作用的原因是因为它清除了其他映射。

于 2016-11-21T19:10:39.290 回答
10

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

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

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

于 2018-03-27T18:12:16.133 回答
4

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

于 2019-04-04T07:32:56.107 回答
2

对于 Linux - Debian 用户,

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

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

还要验证 docker daemon 是否启动 - service docker status

完成上述所有步骤后,您应该没问题......

于 2018-10-01T16:12:23.643 回答
0

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

于 2018-12-31T11:28:48.320 回答
0

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

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

  1. 找到“Doc​​ker Desktop”并右键单击“以管理员身份运行...”
  2. 注意它抱怨的端口。有人说这可能只是 Docker 不友好的表达方式“那个端口正在使用中”。在我的例子中,端口是 80。为了安全起见,我进入了 Windows Pro 上的服务并禁用了“万维网发布服务”。
于 2019-04-14T15:16:08.753 回答
0

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

于 2020-04-17T02:35:33.320 回答
0

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

根据这篇文章,VS 团队正在准备在 16.5 版本中修复此问题,同时您可以"publishAllPorts": true在您的 launchSettings.json 中添加该属性,例如:

"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 桌面 2.2.05 (43884)
  • Docker 引擎 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后现在创建容器,我可以远程调试它。

于 2020-05-11T10:14:46.333 回答
0

在尝试了所有事情之后,这对我有用。似乎我们需要杀死正在运行的进程。

  1. 退出 docker,右键单击图标 Quit Docker Desktop

  2. 打开windows任务管理器,找到并杀死进程com.docker.backend.exe

  3. 重启docker,双击图标打开Docker Desktop

于 2021-11-16T13:10:59.777 回答