sql >> Database >  >> RDS >> Mysql

Docker kan applicatie niet verbinden met MySQL

docker-compose zal standaard een virtueel netwerk creëren waar alle containers/services in het samenstellingsbestand elkaar kunnen bereiken via een IP-adres. Door gebruik te maken van links , depends_on of netwerkaliassen kunnen ze elkaar via de hostnaam bereiken. In uw geval is de hostnaam de servicenaam, maar deze kan worden overschreven. (zie:docs )

Uw script in my_common_package container/service moet dan verbinding maken met mysql op poort 3306 volgens uw opstelling. (niet localhost op poort 3306 )

Merk ook op dat het gebruik van expose is alleen nodig als de Dockerfile voor de service geen EXPOSE . heeft uitspraak. De standaard mysql-afbeelding doet dit al.

Als u een containerhaven wilt toewijzen aan localhost je moet ports gebruiken , maar doe dit alleen als het nodig is.

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"

Hier zeggen we dat poort 3306 in de mysql-container moet worden toegewezen aan localhost op poort 3306.

Nu kunt u verbinding maken met mysql met behulp van localhost:3306 buiten dokwerker. U kunt bijvoorbeeld proberen uw testsql.py . uit te voeren lokaal (NIET in een container).

Container-naar-container-communicatie zal altijd plaatsvinden met behulp van de hostnaam van elke container. Zie containers als virtuele machines.

U kunt zelfs de netwerk-docker-compose vinden die is gemaakt met behulp van docker network list :

1b1a54630639        myproject_default             bridge              local
82498fd930bb        bridge                        bridge              local

.. gebruik dan docker network inspect <id> om de details te bekijken.

Toegewezen IP-adressen aan containers kunnen vrij willekeurig zijn, dus de enige haalbare manier voor communicatie van container naar container is het gebruik van hostnamen.




  1. Converteer 'datetime2' naar 'date' in SQL Server (T-SQL-voorbeelden)

  2. Vergelijkbare lengte- en breedtegraad uit de database halen

  3. Hoe de serverstatuscode te repareren:302 Gevonden door SQL Inject Me Firefox Add-on

  4. MySQL-containers bewaken met Prometheus - Implementatie op standalone en Swarm::deel één