远程访问容器
问题描述:
我有一个远程服务器 - 局域网外部,使用公共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
答
您定义的端口8889
是用这部分内容公共领域到达: -p 8889:8088
如果你想能够通过端口8088访问容器,而不是将起始命令更改为:-p 8088:8088
正如我所看到的,比你的IPv6地址绑定到该端口。为了确保IPv4工作正常,您可以使用 -p IP:8088:8088
或-p 0.0.0.0:8088:8088
我改变了它,但netstat仍然没有看到LISTEN 8088端口。 – user902691
你可以发布'docker ps'的结果和新的netstat结果吗? – Felix
命令'docker ps' CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8c83ab3fb45c kaggle/python:latest“/ usr/bin/tini - ju 42秒前上传41秒0.0.0.0:8088->8088/tcp angry_thompson 休息太长了评论我把它作为编辑后添加。 – user902691