conexão entre dois contêineres docker de duas pilhas

1

Estou desenvolvendo dois projetos que compartilham alguns dados comuns. Os serviços dos dois projetos são criados a partir de dois arquivos YML que compõem o docker. Eu quero acessar o servidor MySQL especificado em uma pilha do script Python em execução na outra pilha.

Estou fazendo isso conectando a um IP interno do docker. No entanto, descobri que após a reinicialização do servidor, o IP é alterado. Eu tentei conectar pelo nome do contêiner, ou "ligando" o nome do contêiner no arquivo YML do docker-compose. Ambos não funcionam. Acho que compartilhar uma interface de rede docker entre duas pilhas deve resolver o problema.

Posso saber como especificar a "rede" nos dois arquivos YML que compõem o docker?

Ou há alguma maneira melhor de conseguir isso?

Obrigado.

    
por y2kbug 16.10.2018 / 10:28

1 resposta

1

Crie uma rede fora de seus arquivos de composição (isso evita dependências na ordem de um arquivo de composição sendo implantado):

$ docker network create dbnet

Em seguida, coloque os serviços que você deseja conectar uns aos outros nesta rede externa. Por exemplo. o arquivo de composição para o mysql pode ser:

version: '3.5'

networks:
  dbnet:
    external: true
    name: dbnet

services:
  mysql:
    networks:
    - dbnet

E seu outro arquivo de composição se conectaria à mesma rede:

version: '3.5'

networks:
  dbnet:
    external: true
    name: dbnet

services:
  pythonapp:
    networks:
    - dbnet

De pythonapp, você se conecta ao banco de dados como "mysql" (o nome do serviço) em vez de IP. O Docker manipulará a resolução de DNS para você, contanto que os contêineres estejam na mesma rede.

Note que usei a sintaxe 3.5+ para definir redes externas. Antes disso, a sintaxe era:

networks:
  dbnet:
    external:
       name: dbnet

Para mais detalhes, consulte: link

    
por 17.10.2018 / 14:52