在 Service Fabric 中托管 Windows 个来宾容器

Hosting Windows Guest Containers in Service Fabric

我无法将简单的容器部署到安装在 Windows 2016 Datacenter w/ Containers 上的开发集群上的单个节点。包已部署,但分区状态始终为 "In Build"。我在下面包含了应用程序和服务清单。

我可以使用以下命令手动远程进入机器和 运行 容器:

docker run --name nanoiis -d -it -p 80:80 nanoserver/iis.

当容器 运行ning 时,我可以从远程计算机访问其中的 IIS 运行ning 实例。由于已记录的 NAT 问题,我无法从主机使用 localhost 访问容器。

现在我需要在 Service Fabric 中获取容器 运行ning。我安装了 5.4.145.9494。我了解此版本的容器支持 运行time 处于预览状态,但这个简单的用例不应该起作用吗?

申请清单

<?xml version="1.0" encoding="utf-8"?>
<ApplicationManifest ApplicationTypeName="ContainerSampleType"
                   ApplicationTypeVersion="1.0.0"
                     xmlns="http://schemas.microsoft.com/2011/01/fabric"
                     xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Parameters>
    <Parameter Name="IISContainer_InstanceCount" DefaultValue="1" />
  </Parameters>
  <ServiceManifestImport>
    <ServiceManifestRef ServiceManifestName="IISContainerPkg" ServiceManifestVersion="1.0.0" />
    <Policies>      
      <ContainerHostPolicies CodePackageRef="Code">        
        <PortBinding ContainerPort="80" EndpointRef="IISContainerTypeEndpoint"/>        
      </ContainerHostPolicies>
    </Policies>
  </ServiceManifestImport>
  <DefaultServices>
    <Service Name="IISContainer">
      <StatelessService ServiceTypeName="IISContainerType" InstanceCount="[IISContainer_InstanceCount]">
        <SingletonPartition />
      </StatelessService>
    </Service>
  </DefaultServices>
</ApplicationManifest>

服务清单

<?xml version="1.0" encoding="utf-8"?>
<ServiceManifest Name="IISContainerPkg"
                 Version="1.0.0"
                 xmlns="http://schemas.microsoft.com/2011/01/fabric"
                 xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <ServiceTypes>
    <StatelessServiceType ServiceTypeName="IISContainerType" UseImplicitHost="true" />
  </ServiceTypes>
  <CodePackage Name="Code" Version="1.0.0">
    <EntryPoint>
      <ContainerHost>
        <ImageName>nanoserver/iis:latest</ImageName>        
      </ContainerHost>
    </EntryPoint>
  </CodePackage>
  <ConfigPackage Name="Config" Version="1.0.0" />
  <Resources>
    <Endpoints>
      <Endpoint Name="IISContainerTypeEndpoint" UriScheme="http" Protocol="http" Port="80"/>
    </Endpoints>
  </Resources>
</ServiceManifest>

我认为您的问题是因为默认的 MS 映像没有明确公开端口 80。ASF 确实需要这个 (atm)

只需自己添加即可:

FROM nanoserver/iis
EXPOSE 80

并将其推送到 docker 集线器或您自己的注册表。

阅读博客 post here 以获取 ASF 上的简单 IIS 容器 运行。 阅读 post here 进行故障排除。