TCP-клиентское соединение из Docker-контейнера - PullRequest
0 голосов
/ 31 октября 2019

Я запускаю Docker Container в Mac OSX (High Sierra) через Docker Desktop.

Мой контейнер работает под управлением CentOS 7.5.1804 вместе с кучей моего пользовательского кода. Код имеет графический интерфейс пользователя, поэтому для управления им используется переадресация X11, и он монтируется в определенный каталог на хост-машине (все это работает отлично).

Моя команда запуска docker в настоящее время:

docker run -d -t -e DISPLAY=host.docker.internal:0 --mount type=bind,source=$HOME/some_dir,target=/some_dir image_name

После запуска контейнера, если я вхожу в него, я могу без проблем создать TCP-сервер (через класс TCPServer в Ruby), а затем подключиться к этому серверу с помощью клиента TCP (через класс TCPSocket в Ruby). ) на хосте. Тем не менее, если я создаю TCP-сервер на хосте, TCP-клиент в контейнере не может подключиться (почти как сетевой трафик односторонний).

В конечном счете, у меня есть источник данных на машине,Хост может общаться с, который создает TCP-сервер для распространения данных. Я хотел, чтобы Контейнер запустил TCP-клиент, а затем подключился к этому серверу (вероятно, через SSH-туннель на моем хосте), но я не могу заставить это работать.

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

--network host
--add-host="localhost:<my_ip>"
-p 5555:5555

Заранее благодарен за любую помощь / предложения!


Мне удалось выяснить, как это сделать.

Ключ в том, что на Mac есть изменяющийся IP-адрес, к которому вам нужно подключиться, чтобы достичьHost.

Docker 17.06 и более поздние версии поддерживают имя хоста «docker.for.mac.localhost», которое будет преобразовываться в правильный IP-адрес.

Это означает, что в моем контейнере мой TCP-клиент будет выглядетькак:

TCPSocket(docker.for.mac.localhost, 5555)

И Host TCP Server будет выглядеть так:

TCPServer(5555)

И это сработало, обе стороны успешно увидели соединение.

...