У меня есть образ докера wiremock.net-nano, который принимает дополнительные параметры командной строки, такие как --Port и --AdminUsername.
Обычная командная строка докера выглядит так:
docker run --rm -p 9091:80 sheyenrath/wiremock.net-nano --ReadStaticMappings true --AdminUsername x --AdminPassword y --RequestLogExpirationDuration 24
Но как мне настроить эти параметры в Azure Service Fabric?
Файл ServiceManifest.xml определяет только имя образа (<ImageName>sheyenrath/wiremock.net-nano</ImageName>) и переадресацию порта (<Endpoint Name = "WireMock_ContainerTypeEndpoint" Port = "9091" />).


Если я не ошибаюсь, <ContainerHostEntryPointType>/<Commands> в элементе - это то, что вы ищете.
Согласно ServiceManifest.xmlсхема:
Pass a comma delimited list of commands to the container.
Отрывок из схемы:
<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>
@StefHeyenrath Удалось ли вам передавать команды параметров, которые должны быть заключены в двойные кавычки? Мне нужно передать аргумент командной строки: -e "GF_SECURITY_ADMIN_PASSWORD = secret"
@JavaadPatel, насколько я понимаю, вы пытаетесь установить переменные среды. Если это так, то в соответствии с это вы можете установить их в узле <CodePackage> / <EnvironmentVariables>. Что касается тега <Commands> - насколько я понимаю, он использует ту же семантику и сервер, что и инструкция docker CMD (но я не уверен на 100%).
@OlegKarasik, вы правы, я неправильно понял синтаксис Docker, "-e" - это, как вы говорите, установка переменной окружения. Я изменил свой сервисный манифест, чтобы передать их, и теперь он работает.
Как правильно объяснил Олег, вы должны указать свои параметры в ServiceManifest.xml вместе с именем образа контейнера в элементе <Commands>.
Что доставляло мне проблемы, так это правильная передача аргумента с его значением (ями). Я обнаружил, что Service Fabric заключит ваши команды в двойные кавычки, если присутствует пробел. В этом случае вам необходимо заменить пробелы запятыми.
Например, у меня есть собственный файл Dockerfile со следующим определением точки входа в формате exec:
ENTRYPOINT ["redis-server.exe", "C:\\Redis\\redis.docker.conf"]
Я хотел передать --slaveof my-redis-master-instance 6379 в качестве аргумента моему контейнеру докеров (где 6379 - порт мастера). Следующий манифест службы приведет к ошибке:
<EntryPoint>
<ContainerHost>
<ImageName>myrepository.azurecr.io/my.servicefabric.redis:3.</ImageName>
<Commands>--slaveof my-redis-master-instance 6379</Commands>
</ContainerHost>
</EntryPoint>
Причина в том, что Service Fabric заключает команду в кавычки, а затем передает ее образу докера, где она интерпретируется как один аргумент и вызывает ошибку.
Как уже объяснялось выше, решение состоит в замене пробелов запятыми. Теперь Service Fabric передает аргументы отдельно.
<EntryPoint>
<ContainerHost>
<ImageName>myrepository.azurecr.io/my.servicefabric.redis:3.2.100</ImageName>
<Commands>--slaveof,my-redis-master-instance,6379</Commands>
</ContainerHost>
</EntryPoint>
Для пояснения, в моем случае я использовал Service Fabric для Windows с контейнерами на основе Nanoserver 1803.
Я не могу заставить это работать для --mac-address = ...
какой образ контейнера вы используете?
Windows. Я не знаком с Redis, и я просто понял, что вышесказанное предназначено для выполнения команд В контейнере, верно? Я хочу передать аргументы самому докеру, чтобы установить MAC-адрес контейнера, но не могу найти способ. Может быть невозможно.
Это действительно так. Теперь я использовал это «<Commands> --AllowPartialMapping false, - x y </Commands>» Однако проблема в том, что параметры командной строки передаются в одинарных кавычках. Как '--AllowPartialMapping false'.