2016-11-20 3 views
0

У меня есть удаленный сервер - внешняя локальная сеть с открытым IP-адресом. Я хотел бы создать простой стартовый скрипт, который запускает мой контейнер и передает его порт во внешний мир.Удаленный доступ к контейнеру

У меня есть следующий сценарий:

#!/bin/bash 

# 8088 should be open host port 
docker run -d -v /home/user/nb/:/root -p 8889:8088 kaggle/python jupyter-notebook --no-browser --port=8889 

sudo iptables -t nat -A PREROUTING -i em1 -p tcp --dport 8088 -j REDIRECT --to-port 8088 

Но, после выполнения сценария, я не имею открытый порт 8088 на сервере.

tcp  0  0 10.0.3.1:53    0.0.0.0:*    LISTEN  0   17333  -    
tcp  0  0 0.0.0.0:22    0.0.0.0:*    LISTEN  0   13560  -    
tcp  0  0 127.0.0.1:6010   0.0.0.0:*    LISTEN  1000  9643  -        
tcp6  0  0 fa81::3a6e:7afe:fe6b:52 :::*     LISTEN  114  17345  -    
tcp6  0  0 :::22     :::*     LISTEN  0   13562  -    
tcp6  0  0 :::8889     :::*     LISTEN  0   17509  -    
tcp6  0  0 ::1:6010    :::*     LISTEN  1000  9642  -  

Так что я не могу подключиться с помощью браузера от других хостов, например:

[IPv4_OF_SERVER]:8088 

Сервер работает Ubuntu 14.04.5 LTS.

Сценарий был основан на https://stackoverflow.com/a/22050818/902691

Но я также попробовал другое решение - порт закрыт на сервере после запуска.

EDIT: После изменения порта в соответствии с @Felix:

$ netstat -anlet 
tcp  0  0 10.0.3.1:53    0.0.0.0:*    LISTEN  0   15758  
tcp  0  0 0.0.0.0:22    0.0.0.0:*    LISTEN  0   15404  
tcp  0  0 127.0.0.1:6010   0.0.0.0:*    LISTEN  1000  14823   
tcp6  0  0 fa81::3a6e:7afe:fe6b:52 :::*     LISTEN  114  13312  
tcp6  0  0 :::22     :::*     LISTEN  0   15406  
tcp6  0  0 :::8088     :::*     LISTEN  0   9985  
tcp6  0  0 ::1:6010    :::*     LISTEN  1000  14822  

$ docker ps 
CONTAINER ID IMAGE     COMMAND    CREATED   STATUS   PORTS     NAMES 
8c83ab3fb45c kaggle/python:latest "/usr/bin/tini -- ju 42 seconds ago Up 41 seconds 0.0.0.0:8088->8088/tcp angry_thompson 

ответ

0

Вы определили порт 8889 быть доступны вашим общественным достоянием с этой части: -p 8889:8088

Если вы хотите для доступа к контейнеру через порт 8088, чем изменить команду пуска на: -p 8088:8088

[edit] Как я уже видел, ваш IPv6-адрес привязывается к этому порту. Чтобы быть уверенным, что IPv4 также работает, вы можете использовать -p IP:8088:8088 ИЛИ -p 0.0.0.0:8088:8088

+0

Я изменил его, но netstat все еще не видит порт LISTEN 8088. – user902691

+0

Вы можете опубликовать результат 'docker ps' и новый результат netstat? – Felix

+0

Команда 'Докер ps' КОНТЕЙНЕР ID IMAGE КОМАНДА СОЗДАЕТСЯ СТАТУС ПОРТЫ ИМЕНА 8c83ab3fb45c kaggle/питон: последний«/ USR/бен/TiNi - дзю 42 секунд назад на 41 секунд 0.0.0.0:8088->8088/tcp angry_thompson Отдых слишком длинный для комментариев. Я добавляю его в сообщение как EDIT. – user902691

Смежные вопросы