似乎无法将 docker 容器端口暴露给主机
Posted
技术标签:
【中文标题】似乎无法将 docker 容器端口暴露给主机【英文标题】:Can't seem to expose docker container port to host 【发布时间】:2017-10-12 18:14:32 【问题描述】:我可能遗漏了一些荒谬的东西,但是我尝试向主机 (Mac) 公开的每个 docker 容器似乎都不起作用。我可以看出容器正在运行,并且似乎已正确暴露于我选择的端口。我错过了一些明显的东西吗?任何帮助将不胜感激。
我拉下了最新的 ElasticSearch 图片:https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html
运行 Docker: docker run -d -p 9200:9200 docker.elastic.co/elasticsearch/elasticsearch:5.4.0
请求查看正在运行的图像: 码头工人ps
查看运行图片: 5e8ae3b13f7c docker.elastic.co/elasticsearch/elasticsearch:5.4.0 "/bin/bash bin/es-..." 4 秒前 Up 4 seconds 0.0.0.0:9200->9200/tcp, 9300/tcp eloquent_almeida
运行 lsof 以查看端口 9200 上是否有任何内容 lsof -i tcp:9200
没有返回
Mac 操作系统:10.12.4
Docker 更新版本:
docker version
Client:
Version: 17.04.0-ce
API version: 1.27 (downgraded from 1.28)
Go version: go1.7.5
Git commit: 4845c56
Built: Wed Apr 5 23:33:17 2017
OS/Arch: darwin/amd64
Server:
Version: 17.03.1-ce
API version: 1.27 (minimum version 1.12)
Go version: go1.7.5
Git commit: c6d412e
Built: Mon Mar 27 16:58:30 2017
OS/Arch: linux/amd64
Experimental: false
已下载 nmap 并针对 9200 localhost 运行。还要确保 9200 现在在 /etc/pf.conf 中打开。
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00016s latency).
Other addresses for localhost (not scanned): ::1
PORT STATE SERVICE
9200/tcp closed wap-wsp
还尝试在 mac 的 IP 上使用 docker-machine:
docker-machine ip default
192.168.99.100
Tried 192.168.99.100:9200 and still no luck
【问题讨论】:
netstat -atp tcp | grep 9200
显示什么?
嗨@BorLaze,当我运行该命令时,什么也没有出现,就像 lsof 检查一样(也尝试了 localhost:9200、127.0.0.1:9200,如果该端口上没有任何内容,它当然不会返回)。感谢您的回复。
你在使用 docker-for-mac 吗?还是旧的 docker 机器?
嗨@Robert 我相信我正在使用 docker-for-mac (docker.com/products/docker-toolbox)
我的版本的输出:客户端:版本:1.13.1 API 版本:1.26 Go 版本:go1.7.5 Git 提交:092cba3 构建:2017 年 2 月 8 日星期三 08:47:51 OS/Arch:darwin /amd64 服务器:版本:1.13.1 API 版本:1.26(最低版本 1.12) Go 版本:go1.7.5 Git 提交:092cba3 内置:2017 年 2 月 8 日星期三 08:47:51 OS/Arch:linux/amd64 实验性:false
【参考方案1】:
您知道,下载的图像或 docker 安装似乎有问题。我重复了你的步骤 - 一切都好:
[06:40 PM] borlaze@mac: /tmp $ docker run -d -p 9200:9200 docker.elastic.co/elasticsearch/elasticsearch:5.4.0
[06:41 PM] borlaze@mac: /tmp $ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fd05a1fe9b5a docker.elastic.co/elasticsearch/elasticsearch:5.4.0 "/bin/bash bin/es-..." 9 seconds ago Up 7 seconds 0.0.0.0:9200->9200/tcp, 9300/tcp practical_bell
[06:41 PM] borlaze@mac: /tmp $ lsof -i tcp:9200
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
com.docke 32108 borlaze 21u IPv4 0x601aa3189a6fc3e3 0t0 TCP *:wap-wsp (LISTEN)
com.docke 32108 borlaze 22u IPv6 0x601aa318a167e6cb 0t0 TCP localhost:wap-wsp (LISTEN)
在 OS 10.12.4 上检查,docker
[06:45 PM] borlaze@mac: /tmp $ docker version
Client:
Version: 17.03.1-ce
API version: 1.27
Go version: go1.7.5
Git commit: c6d412e
Built: Tue Mar 28 00:40:02 2017
OS/Arch: darwin/amd64
Server:
Version: 17.03.1-ce
API version: 1.27 (minimum version 1.12)
Go version: go1.7.5
Git commit: c6d412e
Built: Fri Mar 24 00:00:50 2017
OS/Arch: linux/amd64
Experimental: true
尝试删除图像并重复。
【讨论】:
嗨@BorLaze,这是我的输出 客户端:版本:1.13.1 API 版本:1.26 Go 版本:go1.7.5 Git 提交:092cba3 构建:2017 年 2 月 8 日星期三 08:47:51 OS/Arch:darwin/amd64 服务器:版本:1.13.1 API 版本:1.26(最低版本 1.12) Go 版本:go1.7.5 Git 提交:092cba3 内置:2017 年 2 月 8 日星期三 08:47:51 OS/Arch:linux/amd64 实验:false @scarpacci,至少我们有不同的版本。来自https://hub.docker.com/_/elasticsearch/
的信息:“支持的 Docker 版本:最新版本(尽最大努力降至 1.6)”。我只有一个想法——你的 docker 版本对于这个弹性图像来说太旧了。尝试将 docker 更新到最新版本。
谢谢@BorLaze 我会尝试这样做,看看是否有帮助。再次感谢您的帮助。
我不明白。我刚刚更新并再次尝试,结果相同。我不明白。我想知道我是否有防火墙问题或其他问题。以上是关于似乎无法将 docker 容器端口暴露给主机的主要内容,如果未能解决你的问题,请参考以下文章
Gitlab CI runner 无法暴露嵌套 Docker 容器的端口
如何在没有端口映射的情况下将 docker 容器的 ip 和端口暴露给外部 docker 主机?
无法通过容器的 ip 和通过 http 暴露的端口访问 Docker 容器中的 Web 应用程序