Mysql
 sql >> база данни >  >> RDS >> Mysql

Docker не може да свърже приложение с MySQL

docker-compose по подразбиране ще създаде виртуална мрежа, където всички контейнери/услуги във файла за композиране могат да се свързват един с друг чрез IP адрес. С помощта на links , depends_on или мрежови псевдоними, те могат да се свързват един с друг чрез име на хост. Във вашия случай името на хоста е името на услугата, но това може да бъде отменено. (вижте:docs )

Вашият скрипт в my_common_package контейнерът/услугата трябва да се свърже с mysql на порт 3306 според вашата настройка. (не localhost на порт 3306 )

Също така имайте предвид, че използвате expose е необходимо само ако Dockerfile за услугата няма EXPOSE изявление. Стандартното изображение на mysql вече прави това.

Ако искате да съпоставите порт на контейнер към localhost трябва да използвате ports , но правете това само ако е необходимо.

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"

Тук казваме, че порт 3306 в контейнера mysql трябва да бъде съпоставен с localhost на порт 3306.

Сега можете да се свържете с mysql с помощта на localhost:3306 извън docker. Например можете да опитате да стартирате вашия testsql.py локално (НЕ в контейнер).

Комуникацията между контейнери винаги ще се извършва с помощта на името на хоста на всеки контейнер. Мислете за контейнерите като виртуални машини.

Можете дори да намерите мрежовия docker-compose, създаден с помощта на docker network list :

1b1a54630639        myproject_default             bridge              local
82498fd930bb        bridge                        bridge              local

.. след това използвайте docker network inspect <id> за да разгледате подробностите.

Присвоените IP адреси на контейнерите могат да бъдат доста произволни, така че единственият жизнеспособен начин за комуникация между контейнери е използването на имена на хостове.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Избиране в множество таблици с UNION

  2. Преобразуване на час AM/PM в 24-часов формат с помощта на PHP или MySQL?

  3. SQL грешка 1406 Данните са твърде дълги за колона

  4. PYTHON:Актуализирайте НЯКОЛКО КОЛОНИ с променливи на python

  5. Как да направите множество заявки към SQL