Docker Composer - Falha ao executar minhas imagens webapp e mysql

1

Sou novo no docker e estou com dificuldades para ter o cenário abaixo funcionando: Eu tenho uma imagem de webapp em funcionamento que usa o alpine com o tomcat 9 como uma imagem de base e um aplicativo web adicionado junto com uma série de bibliotecas de usuário.

Então eu tenho uma imagem de banco de dados com o mysql base, que eu importei para o banco de dados requerido pelo meu aplicativo da web.

Se eu executo essas imagens separadamente, elas funcionam bem, eu tenho 100% de acesso a elas do sistema host, sem problema algum.

Agora, preciso que eles se comuniquem entre si, pareceu-me que essa seria a parte fácil, mas não estou conseguindo fazer com que funcione.

Este é o meu composer.yml:

version: "3"
networks:
  uno:
services:
  mysql:
    image: mysql
    ports:
      - "3307:3306"
    networks:
      - uno
  web:
    image: unoerp9
    ports:
      - "8888:8080"
    depends_on:
      - mysql
    links:
      - mysql
    networks:
      - uno

O contêiner começa ok: Verifique a imagem aqui

Mas depois de alguns segundos, alguns erros aparecem no log, e o contêiner mysql pára:

mysql_1 | /usr/local/bin/docker-entrypoint.sh: running /docker-entrypoint-initdb.d/bck.sql

mysql_1 | mysql: [Warning] Using a password on the command line interface can be insecure.

mysql_1 | mbind: Operation not permitted

mysql_1 | mbind: Operation not permitted

mysql_1 | ERROR 1822 (HY000) at line 17806: Failed to add the foreign key constraint. Missing index for constraint 'fn_comissao_pagto_grupo_ibfk_1' in the referenced table 'vd_grupo_colaborador'

db_mysql_1 exited with code 1

Como existem erros com o container mysql, o container webapp dispara erros relacionados a não conseguir se conectar ao banco de dados, o que é completamente esperado, então estou omitindo estes.

Além disso, como as imagens funcionam bem separadamente, não acho que seja algum erro relacionado a como eu as construí, deve ser algo que eu sinto falta no arquivo do meu compositor. O resultado esperado é ter as duas imagens sendo executadas e se comunicando enquanto eu posso acessar a imagem da web através do navegador (localhost: 8888 /) e do banco de dados (localhost: 3307).

Alguma ajuda?

    
por Estevao Santiago 10.08.2018 / 19:42

2 respostas

0

Você pode simplificar consideravelmente seu arquivo de composição:

version: "3"
services:
  mysql:
    image: mysql:5.7
    volumes:
       - mysql-data:/var/lib/mysql
  web:
    image: unoerp9
    ports:
      - "8888:8080"

Existe uma rede criada automaticamente para cada arquivo de composição e todos os contêineres fazem parte dela. Dentro dessa rede, todas as portas dos contêineres estão expostas. Isso significa que você pode conectar a partir do seu tomcat o banco de dados com mysql/my_database_name , você pode omitir a porta lá também porque é o padrão 3306.

Acredito que seu erro do MySQL surge porque a imagem padrão mysql: latest é a versão 8, que provavelmente não é a mesma do sistema de produção. Acima escolhi a tag 5.7 porque ela especifica a versão em algum grau para que você não obtenha problemas de compatibilidade, mas ainda tire proveito das atualizações de segurança de por exemplo 5.7.22 (que @Mohsen sugeriu) para 5.7.23 que é a versão mais nova em o momento.

Também adicionei um volume para armazenar os dados do banco de dados (caso isso seja útil), portanto, as alterações feitas no banco de dados são mantidas entre as reinicializações ( docker-compose down ) quando os contêineres são excluídos.

    
por 12.08.2018 / 02:20
0

Você precisa adicionar uma dependência para a imagem da web na imagem do mysql adicionando estas linhas

depends_on: - mysql

Você pode vincular a imagem da Web à imagem do banco de dados usando:

links: - mysql

Portanto, você pode usar mysql como nome de host para se conectar ao banco de dados.

Tente usar uma imagem específica do mysql, como mysql:5.7.22

Este erro mysql_1 | ERROR 1822 (HY000) at line 17806: Failed to add the foreign key constraint. Missing index for constraint 'fn_comissao_pagto_grupo_ibfk_1' in the referenced table 'vd_grupo_colaborador' está relacionado ao seu esquema mysql e nós não podemos ajudá-lo sem nos mostrar o código-fonte, se você puder compartilhá-lo isso seria ótimo.

    
por 10.08.2018 / 20:47