@HighMan

Как обеспечить взаимодействие docker контейнеров?

Здравствуйте, товарищи!
Предыдущий вопрос я удалил полностью, т.к.... Не правильно заданный вопрос приводит к ненужному ответку.
Сейчас вопрос следующий: как обеспечить взаимодействие контейнеров?
Есть контейнер с приложением. В моем случае nextcloud, есть контейнер с БД, и контейнер с БД. Это разные контейнеры, живущие в разных директориях (на хосте) и запущенные через docker-compose.
Через docker-exec я залез в контейнер nextcloud, установил в нем ping и пытался как-то допинговаться до контейнера с БД. Тщетно!
Приведу docker-compose контейра с MySQL
version: '3'
services:
  mysql_server:
    container_name: mysql_server
    image: mysql:latest
    ports:
      - 3306:3306
    environment:
      - MYSQL_ROOT_PASSWORD=password

    volumes:
      - mysql_db=/var/lib/mysql

Как достучатся до этого контейнера? ping mysql_server ни к чему не приводит.
ping: mysql_server: Name or service not known
Ну и на всякий случай. Как из крнтейнера обратится к некой сетевой службе хостовой машины?
  • Вопрос задан
  • 194 просмотра
Решения вопроса 1
@HighMan Автор вопроса
Большое спасибо за содержательные ответы. Вы мне очень помогли! :)
Сумируя опыт:
Все контейнеры запущенные через docker-compose.yml находятся в одной виртуальной сети и прекрасно видят друг друга по имени.
Некоторые сложности возникают, когда для работы требуется "внешний" контейнер, запущенный из другого docker-compose.yml. Он по умолчанию находится в другой виртуальной сети и по именам не видит другие контейнеры.
На помощь приходит явное объявное объявление сети.
networks:
  pgsql_net:
    name: pgsql_net

Т.к. БД может использоваться другими контейнерами, то имено с ним (в его docker-compose,yml) нужно объявлять новую сетку. В моем случае она называется pgsql_net. Все зависимые контейнеры будут.... Не знаю как правильно сказать, типа, видеть эту виртуальную сеть ее объявить как external.
Вот фрагмент другого docker-compose.yml, который должен общаться с ьазой данных.
networks:
  my_net:
    external:
      name: pgsql_net
..................
     networks:
        -my_net

В каждом зависимом контейнере, так же, нужно прописать общую для всех контернейров сеть, в данном случае, my_net. Эта сеть my_net будет видеть и отдельную сеть контейнера с базой данных.
Возможно, где-то я напридумывал что-то лишнее, но в результате у меня все заработало. Наконец-то увиделся отдельный контейнер с базой данных.
Еще очень помогает возможность залезть в работающий контейнер:
docker exec -it name_container /bin/bash
После этого вы оказываетесь внутри работающего контейнера и можете, на время жизни контейнера, доустановить ping и прочие тестовые инструменты. Если у вас проброшены через volume каталоги с БД, то можно создать базу данных и пользователя. Это тогда сохранится на хостовой машине.
Если будет кому интересно, то я выложу compose файлы и пару скриптов для создания nextcloud+onlyoffice+postgres.
Я понимаю, что для специалиста в docker - это надрывный смех, но я потерял почти сутки на запуск всей этой тряхомудии.
Если кому интересно, то вот ссылка docker-onlyoffice-nextcloud
В коде по ссылке, используется недаскуль и очень рекомендуется прикрутить нормальную БД. MySQL или PostgreSQL.
Ах да! После первого входа, на хостовой машине нужно запустить set_configuration.sh. Оно настроит связку между nextcloud и onlyoffice.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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