Todos os produtos
Search
Central de documentação

Elastic Container Instance:Mount a cloud disk volume to an ECI instance

Última atualização: Jun 27, 2026

Por padrão, o armazenamento de contêineres é efêmero: os dados gravados em um contêiner se perdem na reinicialização. Montar um volume de disco permite que os dados persistam entre reinicializações. Este tópico explica como montar um disco como volume ao criar uma elastic container instance pela API CreateContainerGroup.

Pré-requisitos

Antes de começar, verifique se você tem:

  • Uma elastic container instance na zona de disponibilidade de destino

  • Um disco com pagamento conforme o uso na mesma zona de disponibilidade da instância (para provisionamento estático)

Limitações

  • Somente discos com pagamento conforme o uso podem ser montados. Consulte Faturamento de block storage.

  • Um disco pode ser montado em apenas uma elastic container instance por vez; não há suporte para compartilhamento de discos.

  • Cada elastic container instance aceita no máximo seis volumes de disco.

  • O disco deve estar na mesma zona de disponibilidade da elastic container instance. Não há suporte para montagem entre zonas. Crie o disco na zona de destino antes de montá-lo.

  • Discos NVMe com o recurso de montagem múltipla ativado (discos compartilhados NVMe) não podem ser montados.

  • Discos com partições não podem ser montados. Se você usar um snapshot para criar o disco e o disco resultante tiver partições, a montagem também falhará.

Como funciona

Os volumes de disco usam o plug-in FlexVolume com o driver alicloud/disk. Ao chamar CreateContainerGroup, você:

  1. Declara um volume com os parâmetros Volume.N.* e especifica a source do disco (disco existente ou novo).

  2. Monta o volume declarado em um contêiner com os parâmetros Container.N.VolumeMount.N.* e defina o caminho de montagem e o comportamento.

Os dois modos de provisionamento diferem na source do disco:

Modo

Quando usar

Parâmetro principal

Provisionamento estático

Você já tem um disco para anexar

volumeId em FlexVolume.Options

Provisionamento dinâmico

O ECI cria um novo disco na inicialização

volumeSize em FlexVolume.Options

Declare um volume

Defina os seguintes parâmetros Volume.N.* para declarar um volume de disco.

Parâmetro

Tipo

Exemplo

Descrição

Volume.N.Name

String

disk-demo

Nome do volume. Referenciado por Container.N.VolumeMount.N.Name durante a montagem.

Volume.N.Type

String

FlexVolume

Defina como FlexVolume para usar o plug-in FlexVolume.

Volume.N.FlexVolume.Driver

String

alicloud/disk

Defina como alicloud/disk para montar um disco do Alibaba Cloud.

Volume.N.FlexVolume.FsType

String

ext4

Tipo de sistema de arquivos. Valores válidos: ext4, ext3, xfs, vfat. Padrão: ext4.

Volume.N.FlexVolume.Options

String

{"volumeId":"d-bp1****"}

String JSON com a configuração do disco. Consulte as seções a seguir para ver as chaves disponíveis.

Provisionamento estático — use um disco existente

Forneça volumeId em FlexVolume.Options para anexar um disco existente. O disco deve estar no estado Pending e na mesma zona de disponibilidade da instância. Quando volumeId for especificado, todos os outros parâmetros de atributo do disco (volumeSize, performanceLevel, etc.) serão ignorados. Caso não especifique volumeId, especifique volumeSize.

Chave de opção

Descrição

volumeId

ID do disco a ser anexado.

Provisionamento dinâmico — crie um novo disco

Omita volumeId e forneça volumeSize para que o ECI crie um novo disco na inicialização. O sistema usa automaticamente um SSD aprimorado (ESSD); não é possível especificar a categoria do disco.

Chave de opção

Obrigatório

Descrição

volumeSize

Sim

Tamanho do disco em GiB. Valores válidos: 20–32768. Se você também especificar snapshotId, o tamanho real do disco será o maior valor entre volumeSize e o tamanho do disco baseado em snapshot.

performanceLevel

Não

Nível de desempenho (PL) do ESSD. Consulte ESSDs.

deleteWithInstance

Não

Indica se o disco deve ser liberado quando a instância for liberada. Padrão: true.

encrypted

Não

Indica se o disco deve ser criptografado. Padrão: false. Consulte Visão geral de criptografia.

kmsKeyId

Não

ID da chave do Key Management Service (KMS) usada para criptografia do disco.

snapshotId

Não

ID do snapshot a ser usado na criação do disco. Consulte Visão geral.

tags

Não

Tags para anexar ao disco. Até 20 tags. Formato: "tagkey1:tagvalue1,tagkey2:tagvalue2".

Monte um volume em um contêiner

Após declarar um volume, use os parâmetros Container.N.VolumeMount.N.* para montá-lo em um contêiner.

Parâmetro

Tipo

Exemplo

Descrição

Container.N.VolumeMount.N.Name

String

disk-demo

Nome do volume a ser montado. Deve corresponder a um valor de Volume.N.Name.

Container.N.VolumeMount.N.MountPath

String

/data

Caminho dentro do contêiner onde o volume é montado. Dados existentes nesse caminho ficam ocultos pelo volume.

Container.N.VolumeMount.N.SubPath

String

/logs

Subdiretório do volume a ser montado. Use este parâmetro para montar diferentes subdiretórios do mesmo volume em contêineres distintos.

Container.N.VolumeMount.N.ReadOnly

Boolean

false

Define se o caminho de montagem é somente leitura. Padrão: false.

Container.N.VolumeMount.N.MountPropagation

String

None

Controla se as montagens são compartilhadas entre contêineres e o host. Padrão: None. Consulte a tabela a seguir.

Modos de propagação de montagem

Valor

O que o contêiner vê

O que o host vê

None

Apenas montagens presentes no momento da anexação; nenhuma montagem subsequente neste volume ou em seus subdiretórios fica visível.

Nenhuma montagem criada dentro do contêiner fica visível no host.

HostToContainer

Todas as montagens subsequentes feitas neste volume ou em seus subdiretórios no host tornam-se visíveis dentro do contêiner.

Nenhuma montagem criada dentro do contêiner fica visível no host.

Bidirectional

Todas as montagens subsequentes feitas neste volume ou em seus subdiretórios no host tornam-se visíveis dentro do contêiner.

Todas as montagens criadas dentro do contêiner propagam-se de volta para o host e para todos os contêineres de todas as elastic container instances que usam o mesmo volume.

Para montar volumes em init containers, use os mesmos parâmetros com InitContainer no lugar de Container .

Exemplos

Os exemplos a seguir mostram os principais parâmetros a serem passados para CreateContainerGroup.

Exemplo 1: Provisionamento estático (disco existente)

ContainerGroupName=test-disk1
SecurityGroupId=sg-bp1daxpbz9lzpvvc****
VSwitchId=vsw-bp1gds63lmlm7ib05****

# Declare the volume
Volume.1.Name=disk-demo
Volume.1.Type=FlexVolume
Volume.1.FlexVolume.Driver=alicloud/disk
Volume.1.FlexVolume.FsType=ext4
Volume.1.FlexVolume.Options={"volumeId":"d-2zebuamrpar7xnj****"}

# Mount the volume to the container
Container.1.Name=nginx
Container.1.Image=registry-vpc.cn-hangzhou.aliyuncs.com/eci_open/nginx:1.14.2
Container.1.VolumeMount.1.Name=disk-demo
Container.1.VolumeMount.1.MountPath=/data
Importante

O disco deve estar no estado Pending e na mesma zona de disponibilidade da instância antes de você executar esta operação.

Exemplo 2: Provisionamento dinâmico (novo disco)

ContainerGroupName=test-disk2

# Declare the volume
Volume.1.Name=disk-demo
Volume.1.Type=FlexVolume
Volume.1.FlexVolume.Driver=alicloud/disk
Volume.1.FlexVolume.FsType=ext4
Volume.1.FlexVolume.Options={"volumeSize":"50","tags":"test:eci"}

# Mount the volume to the container
Container.1.Name=nginx
Container.1.Image=registry-vpc.cn-hangzhou.aliyuncs.com/eci_open/nginx:1.14.2
Container.1.VolumeMount.1.Name=disk-demo
Container.1.VolumeMount.1.MountPath=/data

Um ESSD de 50 GiB é criado automaticamente quando a instância é iniciada. Por padrão, o disco é liberado junto com a instância (deleteWithInstance: true).

O exemplo a seguir mostra como usar o software development kit (SDK) Python (versão 1.0.8 ou posterior) para criar uma aplicação MySQL. Os arquivos de dados são salvos em um disco em nuvem com o ID d-2zefzudpm3649e****.

from aliyunsdkcore.client import AcsClient
from aliyunsdkeci.request.v20180808.CreateContainerGroupRequest import CreateContainerGroupRequest
client = AcsClient('LTAI5tRxth3WTjpJWeURGogg', 'iUXTd7GLjGHbazSvg06ykJH60nLU8A', 'cn-shanghai')

request = CreateContainerGroupRequest()
request.set_SecurityGroupId("sg-xxx")
request.set_VSwitchId("vsw-xxx")
request.set_ContainerGroupName("name-xxx")
request.set_EipInstanceId("eip-xxx")
request.set_RestartPolicy('Always')
# volume1 is a cloud disk volume used to save MySQL data files
volume1 = {
    'Name': 'mysql-data-volume',
    'Type': 'FlexVolume',
    'FlexVolume.Driver': 'alicloud/disk',
    'FlexVolume.FsType': 'ext4',
    'FlexVolume.Options': '{\"volumeId\": \"d-2zefzudpm3649e****\"}',
}
# volume2 is a ConfigFile volume used to inject configuration data. The Content must be Base64-encoded.
configFileToPath = {
    'Path': 'my.cnf',
    'Content': 'aGVsbG8gd29ybGQ=',
}
volume2 = {
    'Name': 'mysql-config-volume',
    'Type': 'ConfigFileVolume',
    'ConfigFileVolume.ConfigFileToPaths': [configFileToPath],
}
request.set_Volumes([volume1, volume2])
volume_mount1 = {
    'Name': 'mysql-data-volume',
    'MountPath': '/var/lib/mysql',
    'ReadOnly': False,
}
volume_mount2 = {
    'Name': 'mysql-config-volume',
    'MountPath': '/etc/mysql/conf.d/',
    'ReadOnly': False,
}
# Environment variable
env = {
    'Key': 'MYSQL_ROOT_PASSWORD',
    'Value': '123456',
}
# Container ports
port = {
    'Protocol': 'TCP',
    'Port': 3306,
}
# Containers
container = {
    'Image': 'mysql:5.7',
    'Name': 'mysql',
    'Cpu': 0.5,
    'Memory': 1.0,
    'ImagePullPolicy': 'Always',
    'VolumeMounts': [volume_mount1, volume_mount2],
    'EnvironmentVars': [env],
    'Ports': [port],
}
request.set_Containers([container])
response = client.do_action_with_exception(request)
print(str(response))
                              

Próximos passos