sql >> Database teknologi >  >> RDS >> Mysql

Docker kan ikke forbinde applikationen til MySQL

docker-compose vil som standard oprette virtuelt netværk, hvor alle containere/tjenester i compose-filen kan nå hinanden via en IP-adresse. Ved at bruge links , depends_on eller netværksaliaser, de kan nå hinanden via værtsnavn. I dit tilfælde er værtsnavnet tjenestenavnet, men dette kan tilsidesættes. (se:dokumenter )

Dit script i my_common_package container/tjeneste skal derefter oprette forbindelse til mysql på port 3306 i henhold til din opsætning. (ikke localhost på port 3306 )

Bemærk også, at du bruger expose er kun nødvendig, hvis Dockerfilen til tjenesten ikke har en EXPOSE udmelding. Standard mysql-billedet gør allerede dette.

Hvis du ønsker at tilknytte en containerport til localhost du skal bruge ports , men gør kun dette, hvis det er nødvendigt.

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"

Her siger vi, at port 3306 i mysql-beholderen skal tilknyttes localhost på port 3306.

Nu kan du oprette forbindelse til mysql ved hjælp af localhost:3306 uden for docker. For eksempel kan du prøve at køre din testsql.py lokalt (IKKE i en container).

Container til container kommunikation vil altid ske ved hjælp af værtsnavnet på hver container. Tænk på containere som virtuelle maskiner.

Du kan endda finde netværkets docker-compose oprettet ved hjælp af docker network list :

1b1a54630639        myproject_default             bridge              local
82498fd930bb        bridge                        bridge              local

.. brug derefter docker network inspect <id> at se på detaljerne.

Tildelte IP-adresser til containere kan være ret tilfældige, så den eneste brugbare måde for container til container-kommunikation er at bruge værtsnavne.




  1. Bevar linjeskift fra TextArea, når du skriver til MySQL

  2. DB_NAME() vs ORIGINAL_DB_NAME() i SQL Server:Hvad er forskellen?

  3. INDLÆS DATAINFIL på fjernmaskine

  4. Beskedsystemdatabaseskema