Я пытаюсь получить доступ к службе через определенный порт на хосте из контейнера докеров. Но все, что я получаю, это отказ в соединении. В целях отладки я создаю фиктивный порт прослушивания через nc:
host$ nc -l 888
...
И в контейнере я делаю
container$ ping 172.16.238.1
PING 172.16.238.1 (172.16.238.1) 56(84) bytes of data.
64 bytes from 172.16.238.1: icmp_seq=1 ttl=64 time=0.071 ms
container$ nc -zv 172.16.238.1 888
172.16.238.1: inverse host lookup failed: Unknown host
(UNKNOWN) [172.16.238.1] 888 (?) : Connection refused
Меня не раздражает неудачный обратный поиск хоста, как описано в https://stackoverflow.com/questions/48779583/nc-command-inverse-host-lookup-failed-unknown-host .
Некоторые похожие вопросы указывали на то, что адрес привязки должен совпадать, но, похоже, это нормально:
host$ lsof -i -P -n | grep LISTEN
nc 13405 richardkiefer 3u IPv4 0x69a18bda503dc55d 0t0 TCP *:888 (LISTEN)
Я знаю, что вы можете назначать контейнеры сети хоста, что, кажется, исправляет это в других подобных вопросах, но по соображениям безопасности я предпочитаю этого избегать.
Моя мотивация заключается в целях тестирования и разработки, в которых я хотел бы получить доступ к порту ssh tunneld на моем хост-компьютере (в конечном итоге достигнув удаленного хоста), поэтому я знаю, что могу связать контейнеры с различными службами, как указано в подключение из контейнера докеров к хосту докеров и это не решает мой вариант использования.
Хост - macos, а брандмауэр в соответствии с настройками системы отключен.
Какие-либо предложения? Спасибо заранее!
Не знаю, пытались ли вы связаться с хостом из контейнера через адрес хоста host.docker.internal
это специальное DNS-имя на Mac и Windows только для разработки / тестирования. Сам не пробовал, но искал подобное для Linux.
https://docs.docker.com/docker-for-mac/networking/
Ура!