如何在Azure Service Fabric中为docker容器指定命令行参数
我有一个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
--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地址,但找不到方法。也许不可能。