2017-08-09 5 views
7

Est-il possible d'exposer/ouvrir plus d'un port sur un Azure Container Instance? J'ai seulement pu ouvrir un port par conteneur.Comment exposer plusieurs ports sur l'instance de conteneur Azure?

Je voudrais courir l'équivalent de: docker run -p 80:80 -p 443:443 ...

J'ai essayé sans succès:

  • Carte seulement le dernier port: az container create ... --port 80 --port 443
  • Erreur de syntaxe: az container create ... --port 80 443

Mais la ressource JSON semble indiquer qu'un tableau est possible:

az container show -name <container-name> --resource-group <resource-group-name> 

Response: 
{ 
    "containers": [ 
    { 
     ... 
     "name": "...", 
     "ports": [ 
     { 
      "port": 80 
     } 
     ... 
    } 
    ], 
    ... 
    "ipAddress": { 
    "ip": "xxx.xxx.xxx.xxx", 
    "ports": [ 
     { 
     "port": 80, 
     "protocol": "TCP" 
     } 
    ] 
    }, 
    ... 
} 

Répondre

1

Depuis ports (indiqué par []) la propriété est un tableau, vous pouvez ajouter d'autres éléments à ce:

{ 
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", 
    "contentVersion": "1.0.0.0", 
    "parameters": {  
    "name": { 
     "type": "string", 
     "defaultValue": "acilinuxpublicipcontainergroup" 
    },  
    "image": {   
     "type": "string", 
     "defaultValue": "microsoft/aci-helloworld" 
    }, 
    "port": { 
     "type": "string", 
     "defaultValue": "80" 
    },  
    "cpuCores": { 
     "type": "string", 
     "defaultValue": "1.0" 
    }, 
    "memoryInGb": { 
     "type": "string", 
     "defaultValue": "1.5" 
    } 
    }, 
    "resources": [ 
    { 
      "name": "[parameters('name')]", 
      "type": "Microsoft.ContainerInstance/containerGroups", 
      "apiVersion": "2017-08-01-preview", 
      "location": "[resourceGroup().location]", 
      "properties": { 
       "containers": [ 
        { 
         "name": "[parameters('name')]", 
         "properties": { 
          "image": "[parameters('image')]", 
          "ports": [ 
           { 
            "port": "[parameters('port')]" 
           } 
          ], 
          "resources": { 
           "requests": { 
            "cpu": "[parameters('cpuCores')]", 
            "memoryInGb": "[parameters('memoryInGb')]" 
           } 
          } 
         } 
        } 
       ], 
       "osType": "Linux", 
       "ipAddress": { 
        "type": "Public", 
        "ports": [ 
         { 
          "protocol": "tcp", 
          "port": "[parameters('port')]" 
         }, 
         { 
          "protocol": "tcp", 
          "port": "[parameters('port2')]" 
         } 
        ] 
       } 
      } 
     } 
    ] 
} 

https://github.com/Azure/azure-quickstart-templates/tree/master/101-aci-linuxcontainer-public-ip

Déployer modèle:
https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-manager-create-first-template#deploy-template

+0

Ce JSON est la * réponse * de la commande 'az conteneur show' ... – dstj

+0

bien, je pensais que vous parlez du modèle de bras. En gros, uoi peut utiliser l'extrait suivant dans le gabarit de bras pour définir les ports utilisés par le conteneur. – 4c74356b41

+0

Oh, pouvez-vous améliorer votre réponse pour fournir un exemple plus complet? – dstj

3

Vous pouvez, mais actuellement, vous ne pouvez le faire qu'avec un modèle Azure Resource Manager. L'interface de ligne de commande et le portail sont tous deux orientés vers le cas simple: un conteneur dans le container group et un port exposé dans ce conteneur.

est ici une section des ressources par exemple à partir d'un modèle de ressources Azure Manager (see full template):

"resources": [ 
{ 
     "name": "myContainerGroup", 
     "type": "Microsoft.ContainerInstance/containerGroups", 
     "apiVersion": "2017-08-01-preview", 
     "location": "[resourceGroup().location]", 
     "properties": { 
      "containers": [ 
       { 
        "name": "myContainer", 
        "properties": { 
         "image": "seanmckenna/aci-helloworld-multiport", 
         "ports": [ 
          { 
           "port": "80" 
          }, 
          { 
           "port": "443" 
          } 
         ], 
         "resources": { 
          "requests": { 
           "cpu": "1.0", 
           "memoryInGb": "1.5" 
          } 
         } 
        } 
       } 
      ], 
      "osType": "Linux", 
      "ipAddress": { 
       "type": "Public", 
       "ports": [ 
        { 
         "protocol": "tcp", 
         "port": "80" 
        }, 
        { 
         "protocol": "tcp", 
         "port": "443" 
        } 
       ] 
      } 
     } 
    } 
] 

Vous pouvez déployer le modèle à l'aide az group deployment create (full documentation):

az group deployment create -n myDeployment --template-file azuredeploy.json --parameters @azuredeploy.parameters.json -g myResourceGroup 
+0

Merci, si vous aviez posté cela avant, vous auriez été la réponse acceptée. Mais après avoir travaillé sur le malentendu avec @ 4c74356b41, il a également fait le travail ... – dstj

+2

Pour tout le monde, vous pouvez le faire avec le paramètre --ports maintenant: https://docs.microsoft.com/fr-fr/ cli/azure/container? view = azure-cli-dernier # az_container_create –