我已经使用 Docker 在我的本地主机上托管这个网站两年了。我有一个好主意,为另一个项目安装 IIS,该项目接管了本地主机。
我已经关闭了WAS和W3SVC服务并重新启动了我的计算机; IIS 服务器已关闭,但我仍然无法像以前一样通过 localhost 访问 Docker 托管的内容。我还需要改变什么?
谢谢。
IIS 和 Docker 可以在本地主机上共存,但它们不能同时使用相同的端口。如何处理这个问题取决于您在 Docker 和 IIS 中配置运行的内容。
我已经关闭了 WAS 和 W3SVC...
如何关闭WAS和W3SVC?如果您停止该服务,然后重新启动系统,该服务可能会在重新启动后重新启动。要禁用服务在重新启动后启动,您需要将服务的 StartupType 设置为“已禁用”。
您可以通过 Powershell(以管理员身份)使用以下命令查看当前是否有任何进程正在侦听端口 80:
netstat -b -a -n -o | Select-String ':80'
。 (netstat -b -a -n -o
是一个内置命令,可显示所有侦听端口)。如果有东西正在侦听端口 80,则这是预期的输出:
TCP 0.0.0.0:80 0.0.0.0:0 LISTENING 4
TCP [::]:80 [::]:0 LISTENING 4
如果你
Stop-Service W3SVC -Force
停止IIS(暂时忽略WAS)并再次运行上面的netstat命令,你将不会得到任何输出,因为它是W3SVC服务打开了端口80(所以现在你的docker可以工作,因为IIS 服务未在端口 80 上运行/侦听)。
要正确禁用 IIS 等服务...
您可以像这样检查 WAS 和 W3SVC 服务的 StartupType 和 Status:
Get-Service WAS,W3SVC | Select-Object -Property Name,StartType,Status
默认 IIS 安装后显示:
Name StartType Status
---- --------- ------
W3SVC Automatic Running
WAS Manual Running
要停止并防止自动重启,您可以使用以下命令:
Stop-Service W3SVC -Force
Stop-Service WAS -Force
Set-Service W3SVC -StartupType Disabled
Set-Service WAS -StartupType Disabled
如果 StartupType 和 Status 分别为“禁用”/“停止”,即使重新启动后,IIS 也不会尝试侦听端口 80。
Get-Service WAS,W3SVC | Select-Object -Property Name,StartType,Status
Name StartType Status
---- --------- ------
W3SVC Disabled Stopped
WAS Disabled Stopped
注意:如果您愿意,您可以使用
Services control panel
通过 GUI 管理上述内容 - 您可以从服务上的右键菜单启动/停止,并使用属性对话框访问启动类型选项。
注意:如果您想重新激活 IIS,只需按相反顺序撤消步骤即可:
Set-Service WAS -StartupType Manual
Set-Service W3SVC -StartupType Manual
Start-Service W3SVC
Start-Service W3SVC
/ Stop-Service W3SVC
。但是,如果 IIS 中安装了强制 IIS 自动启动的内容,您应该禁用这些服务以避免出现问题。