Как указать аргументы командной строки для контейнера докеров в Azure Service Fabric

У меня есть образ докера 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" />).

Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
3
0
1 187
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Если я не ошибаюсь, <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>

Это действительно так. Теперь я использовал это «<Commands> --AllowPartialMapping false, - x y </Commands>» Однако проблема в том, что параметры командной строки передаются в одинарных кавычках. Как '--AllowPartialMapping false'.

Stef Heyenrath 06.10.2018 16:30

@StefHeyenrath Удалось ли вам передавать команды параметров, которые должны быть заключены в двойные кавычки? Мне нужно передать аргумент командной строки: -e "GF_SECURITY_ADMIN_PASSWORD = secret"

JavaadPatel 16.08.2019 09:00

@JavaadPatel, насколько я понимаю, вы пытаетесь установить переменные среды. Если это так, то в соответствии с это вы можете установить их в узле <CodePackage> / <EnvironmentVariables>. Что касается тега <Commands> - насколько я понимаю, он использует ту же семантику и сервер, что и инструкция docker CMD (но я не уверен на 100%).

Oleg Karasik 21.08.2019 17:55

@OlegKarasik, вы правы, я неправильно понял синтаксис Docker, "-e" - это, как вы говорите, установка переменной окружения. Я изменил свой сервисный манифест, чтобы передать их, и теперь он работает.

JavaadPatel 22.08.2019 15:56

Как правильно объяснил Олег, вы должны указать свои параметры в 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 = ...

Nick Westgate 02.04.2021 01:17

какой образ контейнера вы используете?

officer 11.04.2021 00:18

Windows. Я не знаком с Redis, и я просто понял, что вышесказанное предназначено для выполнения команд В контейнере, верно? Я хочу передать аргументы самому докеру, чтобы установить MAC-адрес контейнера, но не могу найти способ. Может быть невозможно.

Nick Westgate 11.04.2021 00:42

Другие вопросы по теме