@diman40
Python junior

Как настроить подключение к БД MYSQL: контейнер — контейнер на одном сервере?

Добрый день.
Хочу настроить работу docker приложения (php+lighttpd) с подключением к внешней БД MySQL.
БД работает тоже в контейнере на этом же хосте, наружу выставлен порт 0.0.0.0:3306

Не смог настроить подключение из php+lighttpd к БД по адресу хост-сервера. Если БД запущена так же в контейнере, но на другом сервере, то подключение работает. В рамках одного сервера - нет.
Для одного сервера заработало только после добавления external подсети в настройки php+lighttpd, но подозреваю, что есть более правильное решение.
docker-compose.yml:
version: '3.7'

services:
  php5:
    build: ./images/php5
    restart: "always"
    networks:
      - backend
    volumes:
      - ./www:/var/www/
    ports:
      - "9000:9000"

  lighttpd:
    build: ./images/lighttpd
    restart: "always"
    networks:
      - frontend
      - backend
      - mysql_default
    links:
      - "php5:php-fpm"
    depends_on:
      - php5
    volumes:
      - ./www:/var/www/
      - ./images/lighttpd/etc/lighttpd:/etc/lighttpd
      - ./logs/lighttpd:/var/log/lighttpd/
    ports:
      - "8081:80"
networks:
  frontend:
  backend:
  mysql_default:
    external: true
  • Вопрос задан
  • 174 просмотра
Решения вопроса 1
Насколько я понимаю, контейнеры приложения и контейнер с mysql деплоятся отдельными файлами и принадлежат к отдельным бриджам в докере. Если это так, то все верно - они изорированны друг от друга, но доступны для хост-машины, которая знает о существовании и подключена ко всем доступным сеткам.
Посмотрите здесь: https://docs.docker.com/network/bridge/

То есть вам нужно или подключить дополнительные бриджи к приложению (как вы и сделали), или завести их в одну сетку (бридж) вместе с базой, или воспользоваться дефолтным бриджом (чего документация нам не рекомендует на продакшене, так как изоляция меньше).
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы