Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

O Docker não pode conectar o aplicativo ao MySQL


O docker-compose criará, por padrão, uma rede virtual onde todos os contêineres/serviços no arquivo de composição podem se alcançar por um endereço IP. Usando links , depends_on ou aliases de rede, eles podem se comunicar pelo nome do host. No seu caso, o nome do host é o nome do serviço, mas isso pode ser substituído. (consulte:docs )

Seu script em my_common_package container/service deve então se conectar ao mysql na porta 3306 de acordo com sua configuração. (não localhost na porta 3306 )

Observe também que usar expose só é necessário se o Dockerfile para o serviço não tiver um EXPOSE demonstração. A imagem padrão do mysql já faz isso.

Se você deseja mapear uma porta de contêiner para localhost você precisa usar ports , mas só faça isso se for necessário.
services:
   mysql:
     image: mysql:5.6
     container_name: test_mysql_container
     environment:
       - MYSQL_ROOT_PASSWORD=test
       - MYSQL_DATABASE=My_Database
       - MYSQL_USER=my_user
       - MYSQL_PASSWORD=my_password
     volumes:
       - db_data:/var/lib/mysql
     ports:
       - "3306:3306"

Aqui estamos dizendo que a porta 3306 no contêiner mysql deve ser mapeada para localhost na porta 3306.

Agora você pode se conectar ao mysql usando localhost:3306 fora do docker. Por exemplo, você pode tentar executar seu testsql.py localmente (NÃO em um contêiner).

A comunicação de contêiner para contêiner sempre acontecerá usando o nome do host de cada contêiner. Pense nos contêineres como máquinas virtuais.

Você pode até encontrar a rede docker-compose criada usando docker network list :
1b1a54630639        myproject_default             bridge              local
82498fd930bb        bridge                        bridge              local

.. então use docker network inspect <id> para ver os detalhes.

Os endereços IP atribuídos aos contêineres podem ser bastante aleatórios, portanto, a única maneira viável de comunicação entre contêineres é usando nomes de host.