我有一台远程服务器 - 外部局域网,带有公共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
答案 0 :(得分:0)
您使用以下部分定义了公共域可以访问的端口8889
:
-p 8889:8088
如果您希望能够通过端口8088访问容器而不是将您的启动命令更改为:-p 8088:8088
[编辑]
正如我所看到的,IPv6地址绑定到该端口。为了确保IPv4正常运行,您可以使用
-p IP:8088:8088
或-p 0.0.0.0:8088:8088