Как подключиться к локальной и внешней базе данных из контейнера Docker - PullRequest
0 голосов
/ 27 мая 2019

У меня есть два docker-контейнера, nginx и php, из которых я хочу получить доступ к серверу mysql, работающему на хост-машине, и серверу sql на удаленной машине.

Попытался изменить тип сети с "моста" на "хост", но он возвращает ошибки.

version: '2'

services:
    web:
        image: nginx:latest
        ports:
            - "8080:80"
        volumes:
            - /var/www/:/code
            - ./site.conf:/etc/nginx/conf.d/default.conf
        networks:
            - mynetwork
    php:
        image: php:fpm
        volumes:
            - /var/www/:/code
        networks:
           - mynetwork
networks:
    mynetwork:
       driver: bridge

Я ожидаю, что PHP-код, запущенный в моих контейнерах, может подключиться к этим двум базам данных..

Примечание: я не использую docker run для запуска контейнера, вместо этого я использую docker-compose up -d, поэтому я просто хочу отредактировать файл docker-compose.yml.

Ответы [ 3 ]

1 голос
/ 27 мая 2019

Просто убедитесь, что контейнер может получить доступ к внешней базе данных, зайдя в онлайн. Во-первых, вам нужно убедиться, что у вас есть правильное правило предоставления mysql, например%. 1 \ Вы можете использовать ip хоста для доступа к mysql на хосте изнутри контейнера. 2 \ Другие экземпляры mysql, принадлежащие к той же локальной сети, что и хост, доступ из контейнера также можно получить с помощью IP-адреса локальной сети на экземпляре mysql. Убедитесь, что пинг в порядке, Убедитесь, что пинг работает, иначе может возникнуть проблема с установкой докера, например, проблемы с iptables.

0 голосов
/ 27 мая 2019

Для того, чтобы докеры-контейнеры имели доступ друг к другу, вы должны связать их.Служба Docker использует переключатель ссылок для добавления идентификатора и IP-адреса одного контейнера в файл /etc/hosts другого.

0 голосов
/ 27 мая 2019

В декларации сервиса php вы должны добавить что-то вроде:

extra_hosts:
      - "local_db:host_ip"

Где local_db - это имя, которое вы будете настраивать в строке подключения к базе данных, а host_ip - это IP-адрес вашего хоста в локальной сети.

Вы должны убедиться, что ваш php-код не пытается подключиться к "localhost", потому что это не сработает. Вам нужно использовать имя сервера "local_db" (в моем примере).

Вы делаете то же самое для удаленной базы данных, просто убедитесь, что IP-адрес доступен.

Вы можете удалить сетевое объявление, потому что оно не нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...