Я пытаюсь настроить Docker-контейнер для работы с локальной базой данных.
Изображение это одноhttps://hub.docker.com/r/tuxgasy/dolibarr/и предлагается также создать mariadb
контейнер и связать его с ним.
Я хотел бы настроить контейнер Dolibarr на использование mariadb
базы данных, которая уже есть в моей основной системе и установлена из основного репозитория моего дистрибутива.
Это первый раз, когда я пытаюсь настроить работающее приложение Docker, и я не большой эксперт в обслуживании баз данных, поэтому я немного растерян.
Как это сделать? Пожалуйста, сделайте инструкции максимально понятными и подробными.
Моя система — полностью обновленная openSUSE Tumbleweed.
решение1
Есть три способа:
Используйте опцию --net=host. Этот сетевой режим по сути означает, что контейнер имеет прямой доступ к localhost, и теперь вы можете получить доступ к localhost:3306. Вот команда
docker run --net=host ... tuxgasy/dolibarr
Затем подключитесь к mariadb с помощью
localhost:3306
Смонтируйте сокет mariadb в контейнер docker и подключитесь к mariadb через сокет. Например, если вы настроите расположение сокета как /var/run/mysqld/mysqld.sock, то вы можете смонтировать и использовать его в качестве точки подключения.
docker run -v /var/run/mysqld:/mariadb_socket ... tuxgasy/dolibarr
Затем подключитесь к mariadb через сокет
/mariadb_socket/mysqld.sock
из вашего приложения.Используйте ip хоста docker. Сначала получите ip-адрес хоста в сети docker (в linux введите
ip addr show
и найдитеdocker0 ip). Обычно это что-то вроде172.17.0.1(ваш пробег может отличаться). Тогда вы сможете использовать этот IP-адрес для подключения к mariadb, например172.17.0.1:3306
ПРИМЕЧАНИЕ:... означает любые другие опции, которые вы, возможно, уже используете
решение2
Начиная с Docker v18.03+ вы можете использоватьhost.docker.внутреннийимя хоста для подключения к вашему хосту Docker.
Это предназначено для целей разработки и не будет работать в производственной среде за пределами Docker Desktop.
решение3
Я создал Docker-контейнер именно для этого.https://github.com/qoomon/docker-host
Затем вы можете просто использовать DNS-имя контейнера для доступа к хост-системе изнутри контейнера, например curlhttp://dockerhost:9200
решение4
Помните, что qoomon/docker-host ничем не лучше любого другого метода. Вы должны настроить свое приложение на docker host для привязки и прослушивания docker bridge, прежде чем оно станет доступным. По моему мнению, qoomon/docker-host просто добавляет дополнительный слой к сетевому пакету, что не дает никаких реальных преимуществ
Это копия README для qoomon/docker-host, которую люди, похоже, пропускают. "В системах Linux вам необходимо привязать свои хостовые приложения к сетевому шлюзу моста в дополнение к localhost (127.0.0.1), если вы хотите получить к ним доступ через контейнер docker-host. Используйте следующую команду docker, чтобы получить IP-адрес сетевого шлюза моста"