O contêiner do docker vinculado não pode ser acessado pela porta exposta

7

Eu tenho um arquivo docker-compose.yml com dois contêineres:

containerA:
...
ports:
- "80:9000"

containerB:
...
links:
- containerA

O que eu esperava era ter um containerA acessível pela porta 80 de containerB , mas acessível somente pela porta 9000. A porta 80 só é visível em uma máquina host.

Existe uma maneira de fazer com que a porta containerA 9000 do container seja acessada pela porta 80 para todos os contêineres aos quais está vinculada, não apenas para a máquina host?

    
por Glueon 31.05.2015 / 20:00

1 resposta

7

Quando você expõe uma porta usando a seção ports do arquivo de composição do docker, você está especificando um mapeamento de host:container , portanto, espera-se que 9000 no contêiner seja acessado por 80 no host somente.

Você pode expor uma porta diretamente para outros contêineres link , mas não é possível especificar o número da porta externa, apenas o 9000 (não o 80).

Outra opção é usar o padrão embaixador, onde você tem um "embaixador", que é o caminho entre um consumidor e um provedor. link

Então, contêiner B - > recipiente Um embaixador - > recipiente A

Você pode expor a porta 80 no embaixador e, em seguida, o embaixador pode se conectar à porta 9000 do contêiner A.

À medida que você cria uma infraestrutura mais sofisticada, é possível ser mais criativo com os registros de serviço, de modo que os contêineres estejam se localizando por meio de um registro de serviço em vez de simples links de contêiner.

Por uma questão de boa prática, você geralmente não deve especificar a porta externa diretamente. Se você fizer isso e tentar executar várias cópias do contêiner no mesmo host de encaixe, haverá conflitos de porta. Ou se você estiver executando outro contêiner que tente expor a mesma porta externa, você também receberá conflitos de porta.

    
por 31.05.2015 / 20:52

Tags