Как с линукс-хоста постучаться в порт докер-контейнера?
Добрый день.
Есть 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. насколько я понимаю, айпи адрес - динамический.
Вопрос: как правильно с хоста стучаться в порт контейнера?
С помощью docker inspect выясни какой у контейнера IP и обращайся.
Либо в docker-compose.yml жёстко пропиши IP, чтобы быть уверенным, что он не поменяется.
Чем больше знаю, тем лучше понимаю, как мало знаю.
Прописать IP и container-name в файл /etc/hosts, и тогда доменное имя будет распознаваться, трафик пойдёт. Но если у вас динамический IP - тогда проблема, смена IP всё сразу сломает.
Разумеется как - трафик свободно может проходить с хостовой машины в контейнер и обратно через veth интерфейс. Достаточно выяснить какой в контейнере IP, либо явно его задать в момент запуска контейнера.
dockerlover, можно. Если контейнером управляет Kubernetes или ты сам напишешь скрипт который будет этим заниматься. Ну и вариант с явным указанием IP в docker-compose.yml и прописыванием сответствуюзей A записи в DNS