Я запускаю 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)
И это сработало, обе стороны успешно увидели соединение.