无法从浏览器访问IIS容器-Docker

时间:2018-12-03 09:28:21

标签: docker iis windows-server-2016

Windows版本:Windows Server 2016

Docker for Windows版本:18.09.0

image

我尝试按照https://docs.microsoft.com/en-us/virtualization/windowscontainers/quick-start/quick-start-images

中的步骤进行操作

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

html {
    margin:0;
    height:100%;
    padding:0;
}
body {
    height:100%;
    margin:0;
    padding:0;
    font-size:16px;
}
.first-panel {
    background: black;
    width:250px;
    height:100vh;
    color:white;
    position:fixed;
    left:0;
    clear:both;
    top:0
}
.no-user-select {
    -webkit-user-select:none;
    -moz-user-select:none;
    -ms-user-select:none;
    user-select:none
}
@media only screen and (min-width:480px) {
}
@media only screen and (min-width:640px) {
}
@media only screen and (min-width:768px) {  
}
@media only screen and (min-width:1024px) {
    .first-panel {
        background: white;
        color:black;
    }
}
@media only screen and (min-width:1280px) {
}

请注意,我也尝试过使用FROM microsoft/iis RUN echo "Hello World - Dockerfile" > c:\inetpub\wwwroot\index.html

因此,我使用具有管理员特权的powershell运行:

FROM microsoft/iis:10.0.14393.206

然后我跑了:

docker build -t imagename c:\Build

enter image description here

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

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

enter image description here

但这一切都失败了。

然后,我去了互联网,发现我确实可以称呼bash。因此,我执行了exec,但是发生了一些奇怪的事情:

enter image description here

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

菲 网络: enter image description here

检查容器: enter image description here enter image description here enter image description here

我真的无法从互联网上找到任何解决方案

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

2 个答案:

答案 0 :(得分:1)

更新:我使它可以与下面的以下配置以及远程IIS访问一起使用。确保防火墙没有将docker阻止到您的本地IP。此外,在我们的案例中,该应用程序是网站的一部分,因此我们需要使用Webadministration将该应用程序部署为应用程序,以使其正常运行。日志,其他所有内容现在都可以正常运行,我们有一个正在运行的示例。

我也一直在使用docker容器,并且在部署时遇到类似的问题。我使用的是服务器核心映像,因为它上面具有完整的功能,但是我在执行测试时定义了这样的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映像分配内存大小,而不仅仅是所有者的标准。

答案 1 :(得分:0)

一个月后,我有另一种方法可以访问容器的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

  3. 来启动容器的Powershell。
  4. 运行Get-service来查看IISadmin,w3svc和wmsvc是否存在。

它将显示wmsvc尚未启动(奇怪的是,即使我在DockerFile中运行sc config wmsvc start=auto仍然无法正常工作)

  1. net start服务

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

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

PS。请注意,防火墙可能会阻止远程管理过程