如何在Azure Service Fabric中为docker容器指定命令行参数

如何在Azure Service Fabric中为docker容器指定命令行参数,docker,arguments,containers,azure-service-fabric,Docker,Arguments,Containers,Azure Service Fabric,我有一个docker映像,它接受额外的命令行参数,如--Port和--AdminUsername 正常的docker命令行如下所示: docker run --rm -p 9091:80 sheyenrath/wiremock.net-nano --ReadStaticMappings true --AdminUsername x --AdminPassword y --RequestLogExpirationDuration 24 但是如何在Azure服务结构中配置这些参数呢? Serv

我有一个docker映像,它接受额外的命令行参数,如
--Port
--AdminUsername

正常的docker命令行如下所示:

docker run --rm -p 9091:80 sheyenrath/wiremock.net-nano --ReadStaticMappings true --AdminUsername x --AdminPassword y --RequestLogExpirationDuration 24

但是如何在Azure服务结构中配置这些参数呢?

ServiceManifest.xml文件仅定义映像名(
sheyenrath/wiremock.net nano
)和端口转发(
)。

如果我没有弄错,元素中的
/
就是您要查找的

根据
ServiceManifest.xml

将逗号分隔的命令列表传递给容器

模式摘录:

<xs:complexType xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.microsoft.com/2011/01/fabric" name="ContainerHostEntryPointType">
<xs:sequence>
  <!--container image name-->
  <xs:element name="ImageName" type="xs:string">
    <xs:annotation>
      <xs:documentation>The repo and image on https://hub.docker.com or Azure Container Registry.</xs:documentation>
    </xs:annotation>
  </xs:element>
  <!--comma delimited list of commands for container-->
  <xs:element name="Commands" type="xs:string" minOccurs="0" maxOccurs="1">
    <xs:annotation>
      <xs:documentation>Pass a comma delimited list of commands to the container.</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:element name="EntryPoint" type="xs:string" minOccurs="0" maxOccurs="1"/>
  <xs:element name="FromSource" type="xs:string" minOccurs="0" maxOccurs="1"/>
</xs:sequence>

回购协议与银行形象https://hub.docker.com 或Azure容器注册表。
将逗号分隔的命令列表传递给容器。

正如Oleg正确解释的那样,您必须在ServiceManifest.xml中指定参数,并在
元素中指定容器图像名称

给我带来麻烦的是正确地传递了一个参数及其值。我发现,如果存在空白,ServiceFabric会将您的命令包装成双引号。在这种情况下,必须用逗号替换空格

例如,我有一个自定义Dockerfile,其exec格式的入口点定义如下:

ENTRYPOINT ["redis-server.exe", "C:\\Redis\\redis.docker.conf"]
我想将redis主实例6379的
--slave作为参数传递给docker容器(其中6379是主实例的端口)。以下服务清单将导致错误:

<EntryPoint>
  <ContainerHost>
    <ImageName>myrepository.azurecr.io/my.servicefabric.redis:3.</ImageName>
    <Commands>--slaveof my-redis-master-instance 6379</Commands>
  </ContainerHost>
</EntryPoint>

myrepository.azurecr.io/my.servicefabric.redis:3。
--我的redis主实例6379的从属
原因是ServiceFabric将命令包装成引号,然后将其传递给docker映像,在该映像中它被解释为单个参数,并导致错误

如上所述,解决方案是用逗号替换空格。现在,服务结构分别传递参数

<EntryPoint>
  <ContainerHost>
    <ImageName>myrepository.azurecr.io/my.servicefabric.redis:3.2.100</ImageName>
    <Commands>--slaveof,my-redis-master-instance,6379</Commands>
  </ContainerHost>
</EntryPoint>

myrepository.azurecr.io/my.servicefabric.redis:3.2.100
--slaveof,我的redis主实例,6379

为了澄清,在我的例子中,我使用了基于Nanoserver 1803的Windows Service Fabric容器。

这确实是正确的。现在我使用了“-AllowPartialMapping false,-x y”但是问题是命令行参数是用单引号传递的。比如“--AllowPartialMapping false”。@StefHeyenrath是否能够传递需要用双引号括起来的参数命令?我需要传递一个命令行参数:-e“GF\u SECURITY\u ADMIN\u PASSWORD=secret”@JavaadPatel,据我所知,您正在尝试设置环境变量。如果是这种情况,则可以根据在/node中设置它们。关于标记-据我所知,它使用的语义和服务器与docker(但我不是100%确定)指令相同。@OlegKarasik您是对的,我误解了docker语法,-e”正如您所说的设置环境变量。我更改了我的服务清单,以便将这些文件传入并立即生效。我无法将其用于--mac地址=…您使用的是什么容器映像?Windows。我不熟悉redis,我刚刚意识到上面是为了在容器中运行命令,对吗?我想将参数传递给docker本身来设置容器的MAC地址,但找不到方法。也许不可能。