web-dev-qa-db-fra.com

Comment exposer plusieurs ports sur Azure Container Instance?

Est-il possible d'exposer/ouvrir plusieurs ports sur un Azure Container Instance ? Je n'ai pu ouvrir qu'un port par conteneur.

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

J'ai essayé sans succès:

  • Mappe uniquement 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"
      }
    ]
  },
  ...
}
11
dstj

Depuis ports (indiqué par []) est un tableau dans lequel vous pouvez ajouter plus d'éléments:

{
  "$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 le modèle:
https://docs.Microsoft.com/en-us/Azure/azure-resource-manager/resource-manager-create-first-template#deploy-template

5
4c74356b41

Cela peut désormais être effectué via Azure CLI. L'exemple est ci-dessous:

az container create -g MyResourceGroup --name myalpine --image Alpine: latest --ip-address public --ports 80 443

https://docs.Microsoft.com/en-us/cli/Azure/container?view=Azure-cli-latest#az_container_create

17
jluk

Vous pouvez, mais actuellement vous ne pouvez le faire qu'avec un modèle Azure Resource Manager. La CLI et le portail sont tous deux orientés vers le cas simple: un conteneur dans le groupe de conteneurs , et un port exposé dans ce conteneur.

Voici un exemple de section de ressources à partir d'un modèle Azure Resource Manager ( voir le modèle complet ):

"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 de az group deployment create ( documentation complète ):

az group deployment create -n myDeployment --template-file azuredeploy.json --parameters @azuredeploy.parameters.json -g myResourceGroup
5
Sean McKenna

Maintenant, Azure Portal permet d'ajouter deux ports supplémentaires. Tout ce dont vous avez besoin est de dire " Oui " à Ouvrez des ports supplémentaires dans Configuration lors de la création d'ACI. Voir l'image ci-dessous.

enter image description here

1
Karthikeyan VK