Подключение к контейнеру Mariadb через другой несвязанный контейнер

#docker #nginx #docker-compose #mariadb

#docker #nginx #docker-compose #mariadb

Вопрос:

У меня есть два стека / проекта контейнеров :

  • Первый — это полный стек приложений PHP / Nginx / Mariadb, который работает сам по себе. Он находится в собственном файле docker-compose.
  • Второе — это приложение PHP / Nginx без собственной базы данных в отдельном файле docker-composer. Я хочу, чтобы он подключался к контейнеру базы данных первого стека.

Я запустил 2 стека, они работают нормально сами по себе, но я не могу получить доступ к БД.

Я предполагаю, что это связано с тем, что контейнер работает в виртуальной локальной сети, и мне нужно создать VLAN между 2 контейнерами. Также я должен добавить, что я никак не могу отредактировать первый проект, я могу редактировать только свой локальный проект (второй).

С уважением,

Комментарии:

1. Использование отдельной базы данных для каждого проекта — типичная настройка микросервиса; почему бы не добавить отдельную базу данных во вторую настройку Compose?

2. Потому что идея второго проекта заключается в доступе к данным той же базы данных, что и первый проект. Чтобы не дублировать их.

Ответ №1:

Что ж, я предлагаю вместо того, чтобы устанавливать Db в первый контейнер, а затем пытаться подключить к нему ваш второй проект, установить его в другой контейнер.

Это делает три разных контейнера. Два для ваших проектов, а третий только для вашего MariaDB.

Теперь для подключения к этой базе данных:
создайте сеть в Docker и добавьте в нее эти три контейнера.
Для этого выполните эту команду:

 Create docker network <'network name'>
 

В ваших файлах docker-compose добавьте это в конце созданной вами службы:

 networks:
  - <'network name'>
 

и в конце файла добавьте это:

 networks:
  <'network name'>:
    external: true
 

Комментарии:

1. БД находится в отдельном контейнере в первом проекте, если я правильно понимаю Docker. Первый проект основан на 3 контейнерах : Nginx, php code и MariaDB. Второй проект — это другой Nginx и phpcode. Я предполагаю, что реальная проблема, как вы сказали во второй раз, проблема с сетью.

2. Ну, вы путаете контейнеры и изображения вместе. В вашем первом контейнере у вас есть 3 изображения. На вашем месте я бы сделал это, ваша настройка будет намного проще. Просто установите PHP на два контейнера. Установите Mariadb на третий контейнер. Выполните описанные выше действия, чтобы соединить ваши контейнеры вместе. И вместо того, чтобы использовать Nginx в каждом контейнере, просто установите его на свой компьютер. и в ваших контейнерах перенаправьте порты, на которых запущен ваш проект (если это внутренний проект). А затем в ваших файлах Nginx попросите его прослушивать эти порты.

3. Хорошо, спасибо за разъяснение. Я попробую это.