sql >> Databasteknik >  >> RDS >> Mysql

Docker kan inte ansluta applikationen till MySQL

docker-compose kommer som standard att skapa ett virtuellt nätverk där alla behållare/tjänster i compose-filen kan nå varandra via en IP-adress. Genom att använda links , depends_on eller nätverksalias de kan nå varandra med värdnamn. I ditt fall är värdnamnet tjänstens namn, men detta kan åsidosättas. (se:dokument )

Ditt skript i my_common_package container/tjänst bör sedan ansluta till mysql på port 3306 enligt din inställning. (inte localhost på port 3306 )

Observera också att du använder expose är bara nödvändigt om Dockerfilen för tjänsten inte har en EXPOSE påstående. Standard mysql-bilden gör redan detta.

Om du vill mappa en containerport till localhost du måste använda ports , men gör bara detta om det är nödvändigt.

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"

Här säger vi att port 3306 i mysql-behållaren ska mappas till localhost på port 3306.

Nu kan du ansluta till mysql med localhost:3306 utanför hamnarbetare. Du kan till exempel försöka köra din testsql.py lokalt (INTE i en container).

Behållare till behållare kommunikation kommer alltid att ske med värdnamnet för varje behållare. Tänk på behållare som virtuella maskiner.

Du kan till och med hitta nätverket docker-compose skapat med docker network list :

1b1a54630639        myproject_default             bridge              local
82498fd930bb        bridge                        bridge              local

.. använd sedan docker network inspect <id> för att titta på detaljerna.

Tilldelade IP-adresser till behållare kan vara ganska slumpmässiga, så det enda gångbara sättet för kommunikation mellan behållare och behållare är att använda värdnamn.




  1. Hur man skapar främmande nyckelbegränsningar på flera kolumner i SQL Server - SQL Server / TSQL självstudie del 67

  2. Finns det några fallgropar/saker du behöver veta när du byter från MyISAM till InnoDB

  3. Python, Brew och MySQLdb

  4. Laravel till SQL Server (sqlsrv). [PDOException] kunde inte hitta drivrutinen