远程访问容器

时间:2016-11-20 20:36:36

标签: ubuntu docker iptables jupyter-notebook

我有一台远程服务器 - 外部局域网,带有公共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

但我也尝试了另一种解决方案 - 运行后端口在服务器上关闭。

修改 根据@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

1 个答案:

答案 0 :(得分:0)

您使用以下部分定义了公共域可以访问的端口8889-p 8889:8088

如果您希望能够通过端口8088访问容器而不是将您的启动命令更改为:-p 8088:8088

[编辑] 正如我所看到的,IPv6地址绑定到该端口。为了确保IPv4正常运行,您可以使用 -p IP:8088:8088-p 0.0.0.0:8088:8088