Reputation: 5220
Is it possible to expose/open more than one port on an Azure Container Instance? I've only been able to open one port per container.
I'd like to run the equivalent of: docker run -p 80:80 -p 443:443 ...
I've unsuccessfully tried:
az container create ... --port 80 --port 443
az container create ... --port 80 443
But the resource JSON seems to indicate that an array is 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"
}
]
},
...
}
Upvotes: 17
Views: 29370
Reputation: 1030
This can now be done via Azure CLI. Example is below:
az container create -g MyResourceGroup --name myalpine --image alpine:latest --ip-address public --ports 80 443
https://learn.microsoft.com/en-us/cli/azure/container?view=azure-cli-latest#az_container_create
**update: you can set the protocol now as well. TCP or UDP in both the cli and the portal.
i.e.
[--ports]
[--protocol {TCP, UDP}]
Upvotes: 25
Reputation: 6006
Now Azure Portal provides way to add two extra ports. All you need is to say "Yes" to Open additional ports in Configuration while creating ACI. See Image below.
Upvotes: 4
Reputation: 3714
You can, but currently you can only do it with an Azure Resource Manager template. The CLI and the portal are both oriented towards the simple case: one container in the container group, and one exposed port in that container.
Here's an example resources section from an Azure Resource Manager template (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"
}
]
}
}
}
]
You can deploy the template using az group deployment create
(full documentation):
az group deployment create -n myDeployment --template-file azuredeploy.json --parameters @azuredeploy.parameters.json -g myResourceGroup
Upvotes: 5
Reputation: 72171
Since ports
( indicated by []
) property is an array you can add more elements to it:
{
"$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
Deploy template:
https://learn.microsoft.com/en-us/azure/azure-resource-manager/resource-manager-create-first-template#deploy-template
Upvotes: 7