Я запускаю Docker-контейнер из образа с параметрами --net="host" -P
.
Как и ожидалось, я могу сделать:
- хост:
ubuntu@main-6:~$ nc -kl localhost 3000
- Докер:
fenics@main-6:~$ nc localhost 3000
и это нормально работает, я могу передавать информацию.
Но если я сделаю наоборот:
- docker:
fenics@main-6:~$ nc -kl localhost 3000
- host:
ubuntu@main-6:~$ nc localhost 3000
Тогда это не работает, команда host nc
немедленно возвращается.
Есть идеи, почему?
И хост, и Docker - это, по сути, Ubuntu 16.04 с некоторыми установленными пакетами.
Мне очень нравится, что первое работает, но мне нужно, чтобы второе тоже работало.
Edit 1
Другой забавный факт того же рода: использование nc
работает на моей машине через tmux между двумя панелями для связи:
Но то же самое не работает с док-контейнером:
Может ли это быть как-то такая же проблема?
Редактировать 2
Но как ни странно это работает:
ubuntu@main-6:~$ python3
Python 3.6.8 (default, Oct 7 2019, 12:59:55)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import socket
>>>
>>> s = socket.socket() #create a socket object
>>> host = socket.gethostname() #Host i.p
>>> port = 4001 #Reserve a port for your service
>>>
>>> s.connect((host,port))
>>> print(s.recv(1024))
b'Thank you for connecting!'
>>>
fenics@main-6:~$ python3
Python 3.6.7 (default, Oct 22 2018, 11:32:17)
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import socket
>>> s = socket.socket() #Create a socket object
>>> host = socket.gethostname() #Get the local machine name
>>> port = 4001 # Reserve a port for your service
>>> s.bind((host,port)) #Bind to the port
>>>
>>> s.listen(5) #Wait for the client connection
>>> c,addr = s.accept() #Establish a connection with the client
>>> c.send(b"Thank you for connecting!")
25
Изменить 3: что я хочу сделать с самого начала
Несколько слов о том, почему я смотрю на все эти странные вещи.
Итак, в основном у меня есть одна виртуальная машина, main-5
,на котором что-то происходит, и вторая виртуальная машина main-6
, на которой работает докер. Я хочу отправить информацию по сокету, туннелированному через ssh с main-5, на докер, работающий на main-6. Я могу заставить работать туннельный сокет от main-5 до main-6:
ubuntu@main-5:~$ ssh -N -L 3006:127.0.0.1:3006 ubuntu@MYIP
ubuntu@main-5:~$ nc localhost 3006
gla
ubuntu@main-6:~$ nc -kl localhost 3006
gla
, но не могу активировать сервер и получать его из докера, то есть fenics@main-6
, несмотря на *Варианты 1079 * и -P
.