Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Docker nie może połączyć aplikacji z MySQL

docker-compose domyślnie utworzy sieć wirtualną, w której wszystkie kontenery/usługi w pliku tworzenia mogą łączyć się ze sobą za pomocą adresu IP. Używając links , depends_on lub aliasy sieciowe, które mogą łączyć się ze sobą za pomocą nazwy hosta. W twoim przypadku nazwa hosta jest nazwą usługi, ale można ją zastąpić. (patrz:dokumenty )

Twój skrypt w my_common_package kontener/usługa powinna następnie połączyć się z mysql na porcie 3306 zgodnie z twoją konfiguracją. (nie localhost na porcie 3306 )

Pamiętaj też, że używanie expose jest konieczne tylko wtedy, gdy plik Dockerfile dla usługi nie ma EXPOSE oświadczenie. Standardowy obraz mysql już to robi.

Jeśli chcesz zmapować port kontenera na localhost musisz użyć ports , ale rób to tylko wtedy, gdy jest to konieczne.

Usługi
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"

Mówimy tutaj, że port 3306 w kontenerze mysql powinien być zmapowany na localhost na porcie 3306.

Teraz możesz połączyć się z mysql za pomocą localhost:3306 poza dokiem. Na przykład możesz spróbować uruchomić swój testsql.py lokalnie (NIE w kontenerze).

Komunikacja kontenera z kontenerem zawsze będzie odbywać się przy użyciu nazwy hosta każdego kontenera. Pomyśl o kontenerach jako maszynach wirtualnych.

Możesz nawet znaleźć sieć docker-compose utworzoną za pomocą docker network list :

1b1a54630639        myproject_default             bridge              local
82498fd930bb        bridge                        bridge              local

.. następnie użyj docker network inspect <id> aby przyjrzeć się szczegółom.

Adresy IP przypisane do kontenerów mogą być dość losowe, więc jedynym realnym sposobem komunikacji kontener-kontener jest używanie nazw hostów.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Alternatywa dla z wyjątkiem MySQL

  2. jak wyprowadzić tabelę klasyfikacji w locie z tabeli mysql wyników piłkarskich [soccer]?

  3. MySQLd nie uruchamia się po aktualizacji brew z 5.6 do 5.7

  4. Funkcje daty i czasu MySQL nie istnieją

  5. BŁĄD 1452 (23000):Nie można dodać lub zaktualizować wiersza podrzędnego:ograniczenie klucza obcego nie powiodło się