@dockerlover

Как с линукс-хоста постучаться в порт докер-контейнера?

Добрый день.

Есть docker-compose.yml, который запускает nginx, который слушает порт 80 контейнера.
В docker-compose.yml не прописана директива `ports` (т.е., порт из контейнера не маппится на хост).
Нужно с хоста обратиться на порт 80 контейнера и получить ответ.

Очевидный вариант `curl container-name:80` не работает:
```
curl: (6) Could not resolve host: container-name
```

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

Вариант прописать в docker-compose.yml ports: `127.0.0.1:xxx:80` не подходит:
1. не хочется трогать docker-compose, поскольку он в таком виде режит в репозитории и при очередном git pull перезапишется и сломается;
2. когда понадобится запустить ещё один какой-то контейнер в похожих условиях - надо будет вручную все прописывать и помнить, что у первого порт ххх, а у второго - ууу.

Сделать `docker inspect`, достать ip-адрес и стучаться в него не подходит:
1. насколько я понимаю, айпи адрес - динамический.

Вопрос: как правильно с хоста стучаться в порт контейнера?
  • Вопрос задан
  • 283 просмотра
Пригласить эксперта
Ответы на вопрос 4
karabanov
@karabanov Куратор тега Linux
Системный администратор
С помощью docker inspect выясни какой у контейнера IP и обращайся.
Либо в docker-compose.yml жёстко пропиши IP, чтобы быть уверенным, что он не поменяется.
Ответ написан
Комментировать
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Прописать IP и container-name в файл /etc/hosts, и тогда доменное имя будет распознаваться, трафик пойдёт. Но если у вас динамический IP - тогда проблема, смена IP всё сразу сломает.
Ответ написан
Комментировать
ZIK1337
@ZIK1337
т.е., порт из контейнера не маппится на хост
насколько я понимаю, айпи адрес - динамический

тогда никак
Ответ написан
@dockerlover Автор вопроса
Судя по тому, что такие сложности - я подозреваю, что у меня изначально неправильно поставлена задача, и я забиваю гвозди микроскопом теперь.

1. У меня есть два контейнера с сайтами, оба слушают свой порт 80;
2. Мне нужно на хосте сделать реверс прокси к каждому из них;

Делать маппинг портов мне не нравится (нужно помнить где какой и не перепутать их).

Стучать на статичный айпи - тоже, по этой же причине.

Держать реверс прокси в отдельном контейнере в общей сети с сайтами - вариант, но чем это лучше, чем держать прокси прямо на хосте без контейнера?

Поднять свой локальный днс, который по запросу имени контейреа будет возвращать его ip - вариант, но какой-то сложный для такой простой задачи.

Как это решают умные люди?
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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