我知道在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版本:
非常感谢任何帮助。谢谢。
答案 0 :(得分:56)
这是一个新的转折。
最新的Windows 10更新(Fall Creators Update,2017)具有新的“功能”。它会自动启动您上次关闭时运行的所有应用程序。
这使得Docker for Windows处于不良状态。这使得看起来这些端口被其他东西使用 - 它本身就是鬼魂。这就解释了为什么即使我停止/启动我的容器甚至重启,这些端口仍在使用中!
这种情况下的解决方案是简单地重启Docker守护程序。
要在下次关机后防止这种情况,请不要使用关机按钮。改为输入:
shutdown /s /t 0
这绕过了新功能。
在这篇帖子中查看Jason [MS]的答案:
这是一个人的解决方法(从这个帖子的结尾 - 我自己没有尝试过):
http://www.icttoolbox.nl/info/stop-windows-10-creator-fall-reopening-programs-reboot/
答案 1 :(得分:27)
重新启动Docker守护进程暂时解决了这个问题,但要最终摆脱它,我必须禁用Windows 10快速启动,这是@ biscuit314所描述的功能。
要禁用Windows 10快速启动,请转到控制面板>电源选项>选择电源按钮的功能>更改当前不可用的设置>取消选中启用快速启动(推荐)和保存更改
答案 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,禁用“快速启动”,重新启动计算机,确保禁用“实验性功能”。这些东西都不起作用。
我最终使它运行了。您可能想尝试一下一些方法(因为我不确定实际上是什么修复方法。)
答案 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
。对其进行定义将使解决方法不起作用。
此设置对我有用:
我意识到VS正在创建命令,两次包含-p参数,一个使用我指定的端口,另一个使用端口80,例如:-p 3010:80 -p 3010:3010
。
添加publishAllPorts
之后,它现在创建了容器,我可以对其进行远程调试。