所以我试图在我的 Ubuntu 20.04.3 LTS 服务器上设置一些网站和其他东西。不同的 WebUI 基于通过 nginx 访问的不同 docker 中的应用程序。但我希望能够连接到我的任何 docker。经过故障排除后,似乎端口转发在我的任何 docker 上都不起作用。它从我的 node-red docker 开始,nginx 也没有工作,现在我已经设置了一个非常简单的 whoami docker 和一个在端口 8000 上运行的非常基本的 web 服务器。我仍然无法连接到它。
如果我使用“docker exec -ti whoami sh”进入docker,我能够通过wget访问web服务器,但不能从docker外部访问。
我搜索了很多,大多数问题都与错误使用 -p 标志或 Web 服务器仅监听本地主机等有关。但这里的情况并非如此。
这是我的测试终端输出,显示发生了什么
$~ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
726da9705b7f jwilder/whoami "/app/http" About a minute ago Up About a minute 0.0.0.0:8000->8000/tcp, :::8000->8000/tcp whoami
$~
$~ wget -O - http://127.0.0.1:8000/
--2021-10-16 23:19:09-- http://127.0.0.1:8000/
Connecting to 127.0.0.1:8000... connected.
HTTP request sent, awaiting response... Read error (Connection reset by peer) in headers.
Retrying.
--2021-10-16 23:21:21-- (try: 2) http://127.0.0.1:8000/
Connecting to 127.0.0.1:8000... connected.
HTTP request sent, awaiting response... ^C
$~
$~ docker exec -ti whoami sh
/app # wget -O - http://127.0.0.1:8000/
Connecting to 127.0.0.1:8000 (127.0.0.1:8000)
I'm 726da9705b7f
- 100% |*****************************************************| 17 0:00:00 ETA
/app # exit
$~
$~ cat run.sh
docker run -d -p 8000:8000 --name whoami -t jwilder/whoami
$~
$~
服务器没有固定到本地主机的证明:
$~
$~ docker logs -f whoami
Listening on :8000
I'm 726da9705b7f
^C
$~
$~ docker exec -ti whoami sh
/app # ./http
Listening on :8000
2021/10/16 22:36:23 listen tcp :8000: bind: address already in use
/app # exit
$~
$~
据我所知,docker 服务实际上占用了该端口:
$~
$~ sudo lsof -i:8000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
docker-pr 24976 root 4u IPv4 112329 0t0 TCP *:8000 (LISTEN)
docker-pr 24984 root 4u IPv6 114001 0t0 TCP *:8000 (LISTEN)
$~
$~
但它仍然不起作用。
有人知道出了什么问题吗?我很困惑。
答案1
尝试在不同的端口上运行该容器:
$ docker run --rm -d -p 8001:8000 --name whoami -t jwilder/whoami
64a5059666e0f3db12562a44edf576336f73fcecd5e7d86c1e739259e1ffd307
$ curl localhost:8001
I'm 6a82c9e7371e
如果此方法有效,那么主机上可能发生了一些可疑的事情(可能是带有端口重定向的 iptables)。