Видимость сети в пределах docker -композит - PullRequest
0 голосов
/ 23 марта 2020

Я построил docker -композицию с 3 сервисами: db, nginx, selenium. Приложение, размещенное на nginx, связывается с базой данных (nginx <-> db) и приложением для тестирования селена (selenium -> app).

version: '3'
services:
  nginx:
    image: <my_private_repo>/nginx
    ...
  db:
    image: <my_private_repo>/db
    # nginx cannot communicate with db after I remove exposing port 3306
    ports:
      - "3306:3306"
    ...
  selenium:
    image: joyzoursky/python-chromedriver:3.8-selenium
    command: "bash seleniumScript.sh"
    depends_on:
      - nginx
      - db

Я запускаю свои тесты с docker-compose run selenium Все работает, когда я выставляю порт базы данных, но когда я прекращаю выставлять порт 3306 nginx не может обмениваться данными с БД.

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

У меня вопрос: как настроить порты между службами, не выставляя их на хост-машину?

Обновление: Мой nginx приложение настроило хост базы данных для имени службы db. Настройка скрипта Selenium заполнить базу данных, используя db host и тестировать приложение nginx через https://nginx url.

1 Ответ

1 голос
/ 24 марта 2020

Этот вопрос здесь задает нечто очень похожее.

Контейнер nginx не может достичь контейнера базы данных, вероятно, потому что вы обращаетесь к нему через docker host localhost.

Контейнеры, находящиеся в одной сети, всегда могут достигать друг друга, не открывая никаких портов, но используя имена хостов. См .: docker документы . Это означает, что вы можете подключиться к контейнеру базы данных изнутри контейнера nginx, используя db:3306.

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

...