【问题标题】:Cannot access an IIS container from browser - Docker无法从浏览器访问 IIS 容器 - Docker
【发布时间】:2019-05-04 13:43:42
【问题描述】:

Windows 版本:Windows Server 2016

Docker for Windows 版本:18.09.0

我尝试按照https://docs.microsoft.com/en-us/virtualization/windowscontainers/quick-start/quick-start-images中的步骤进行操作

我在 c:\Build: 上有一个 Docker 文件

FROM microsoft/iis
RUN echo "Hello World - Dockerfile" > c:\inetpub\wwwroot\index.html

请注意,我也尝试过使用FROM microsoft/iis:10.0.14393.206

所以,我使用具有管理员权限的 powershell 运行:

docker build -t imagename c:\Build

然后我跑了:

docker run -d -p 8000:80 --name container imagename ping -t localhost

上述所有步骤都可以,但我无法访问该网站,

我尝试了各种组合,例如: 来自 ipconfig:8000 或 80 的 IP 地址;检查的IP地址:8000 / 80。 请注意,我还设置了防火墙以允许端口 8000 以及

但这一切都失败了。

然后,我上网,发现我实际上可以调用bash。因此,我运行了 exec,但是,发生了一些奇怪的事情:

我不确定这是否意味着容器不工作? 但是检查和容器 ls 显示它应该可以工作。

仅供参考 网络:

检查容器:

我实在是在网上找不到任何解决办法

任何建议都会有所帮助,谢谢

【问题讨论】:

    标签: docker iis windows-server-2016


    【解决方案1】:

    更新:我让它与下面的配置一起工作,并通过远程 IIS 访问。确保防火墙没有阻止 docker 访问您的本地 IP。此外,我们的应用程序是网站的一部分,因此我们需要使用 Webadministration 将其部署为应用程序以使其工作。日志和其他一切现在都在工作,我们有一个正在运行的示例。

    我也一直在使用 docker 容器,并且在部署时遇到了类似的问题。我使用的是服务器核心映像,因为它上面有完整的 powershell,但是我有这样定义的 dockerfile 来构建映像,因为应用程序似乎没有启动。该应用程序尚未在核心上,但将很快迁移到它以使工作图像更小。此示例中要注意的另一件事是,即使在我的命令中定义了应用程序池,也没有创建应用程序池。有了这个,您可以使用 iis 远程管理工具进行远程连接,并检查服务器在 docker 中的设置情况。:

    ##Pull the base image to use
    FROM mcr.microsoft.com/windows/servercore/iis
    #Enable verbose output in case of errors
    SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop';"]
    #install all needed features of IIS
    RUN Install-WindowsFeature -name Web-Server -IncludeManagementTools ;\
        Install-WindowsFeature -name Web-Basic-Auth ;\
        Install-WindowsFeature -name Web-Windows-Auth ;\
        Install-WindowsFeature -name Web-Net-Ext45 ;\
        Install-WindowsFeature -name Web-ISAPI-Ext ;\
        Install-WindowsFeature -name Web-ISAPI-Filter ;\
        Install-WindowsFeature -name Web-WHC ;\
        Install-WindowsFeature NET-Framework-45-ASPNET ; \
        Install-WindowsFeature Web-Asp-Net45 ;\
        Install-WindowsFeature -Name Web-Mgmt-Service ;\
        Install-WindowsFeature -name Web-Mgmt-Tools ;\
        Install-WindowsFeature -name Web-Mgmt-Compat ;\
        Install-WindowsFeature -name Web-Scripting-Tools ;\
        Dism /online /enable-feature /featurename:IIS-ManagementService /all ;\
        ##Still inside the same run command, enable remote management for IIS on docker
        New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\WebManagement\Server -Name EnableRemoteManagement -Value 1 -Force ;\
        Get-Service -Name WMSVC | Start-Service ;\
        Set-Service –Name WMSVC –StartupType 'Automatic' ;\
        ##In the same run Command add the user and password for IIS remote management
            net user myuser superP@ss123 /ADD ;\
            net localgroup administrators myuser /add
    
        COPY . myapp
        RUN New-WebAppPool myapp
    #The configStore is an application of a website, so add it as such to the service
    RUN Import-Module WebAdministration; Get-Module ;\
        New-Item 'IIS:Sites\Default Web Site\myapp' -physicalPath 'c:\myapp' -ApplicationPool 'myapp' -type 'Application'
    
    EXPOSE 51329 80
    

    另一个我没有答案的问题是我们是否可以在创建时为 docker 图像分配内存大小,而不仅仅是所有者的标准。

    【讨论】:

    • 我猜你可以在创建时分配容器的内存大小(Docker 运行)docs.docker.com/engine/reference/run/#user-memory-constraints 同样,在创建 AWS ECS 实例时会要求你这样做
    • 我刚刚开始工作。问题是我们的应用程序设计为在主网站内作为 iis 应用程序工作。在做了一些改变之后,我让它工作了。我还对一些脚本进行了调整,因此我可以远程访问 iis 并进行更改。现在所有跟踪日志都在工作,并且在 docker 映像中可见。我将在这里更新脚本,让您了解我目前的情况。另外我会检查那个帖子并再试一次记忆的事情
    • 介意我问:您可以从同一网络中的另一台机器访问该网站吗?我发现 nat 上的端口映射没有按预期工作,我想我们确实需要桥接/自定义网络......但我无法创建一个。 Tbh,Windows Server 中的 Docker 支持和信息太少......不像 Linux 甚至 Docker for Windows(不适用于 Windows 服务器 >=2016)
    • 就在本地。此配置适用于本地机器,因为我们正在尝试进行离线开发。如果您尝试进行服务器共享,您需要将 docker ip 和端口权限授予防火墙,并且您应该能够通过 compose 或 dockerfile 直接在 docker 上管理 Nat
    • 嘿@Near 可能。我在 MS 的文档中读到了一些关于不支持的网络命令的内容。 docs.microsoft.com/en-us/virtualization/windowscontainers/… 看看这是否为您提供了有关如何设置它的更好线索。稍后我会再挖掘一些,看看我是否可以为您提供更好的答案并更新此答案。但我认为此时您可以完成这个故事,因为主要意图已经完成,并且可能会打开一个单独的线程来指出这个问题和新问题
    【解决方案2】:

    一个月后,我有另一种方法可以访问容器的 IIS...

    我将在这里发布答案,以防有人遇到类似问题

    设置与https://blogs.msdn.microsoft.com/containerstuff/2017/02/14/manage-iis-on-a-container-with-the-iis-admin-console/有很大关系

    区别在于:

    要在容器中完全安装 IIS,请使用以下 DockerFile:

    (文档中遗漏了一些步骤,如果没有以下 Dockerfile 中包含的行,则无法安装 wmsvc 和 IIS 管理服务)

    FROM microsoft/dotnet-framework:4.6.2
    
    RUN powershell -Command Install-WindowsFeature -name Web-Server -IncludeManagementTools
    
    RUN powershell -Command Add-WindowsFeature web-webserver
    
    RUN powershell -Command Install-WindowsFeature -name Web-Basic-Auth
    
    RUN powershell -Command Install-WindowsFeature -name Web-Windows-Auth
    
    RUN powershell -Command Install-WindowsFeature -name Web-Net-Ext45
    
    RUN powershell -Command Install-WindowsFeature -name Web-Asp-Net45
    
    RUN powershell -Command Install-WindowsFeature -name Web-ISAPI-Ext
    
    RUN powershell -Command Install-WindowsFeature -name Web-ISAPI-Filter
    
    RUN powershell -Command Install-WindowsFeature -name Web-WHC
    
    RUN powershell -Command Install-WindowsFeature -name Web-Mgmt-Tools
    
    RUN powershell -Command Install-WindowsFeature -name Web-Mgmt-Compat
    
    RUN powershell -Command Install-WindowsFeature -name Web-Mgmt-Service
    
    RUN powershell -Command Install-WindowsFeature -name Web-Scripting-Tools
    
    RUN powershell Dism /online /enable-feature /featurename:IIS-ManagementService /all
    
    1. Docker run 带有 -it 的镜像 / Docker attach 容器

    2. 输入powershell启动容器的powershell

    3. 运行Get-service 看看是否有IISadmin、w3svc 和wmsvc。

    会显示wmsvc没有启动(奇怪的是我在DockerFile中运行sc config wmsvc start=auto还是不行)

    1. net start服务

    2. 使用主机的IIS连接容器的IIS(与上面链接给出的步骤类似)

    它应该能够从主机连接到容器,现在您已经成功地在容器中实现了一个 Web 应用程序。

    附言。注意防火墙可能会阻止远程管理进程

    【讨论】:

    • 当然,我现在可以从主机浏览器访问容器托管网站
    猜你喜欢
    • 1970-01-01
    • 2022-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-12
    • 1970-01-01
    相关资源
    最近更新 更多