docker - 如何通过容器的 IP 地址访问 Docker 容器的服务?
问题描述
我有点困惑。尝试在 Docker 容器内同时运行监听端口 8080 的 HTTP 服务器和监听端口 22 的 SSH 服务器,我设法完成了后者,但奇怪的是不是前者。
这是我想要实现的目标以及我是如何尝试的:
我想使用分配给容器的 IP 地址访问在 Docker 容器内运行的服务:
ssh user@172.17.0.2
curl http://172.17.0.2:8080
注意: 我知道这不是您配置真实 Web 服务器的方式,但我希望容器模仿运行这两种服务的嵌入式设备,而我并非一直都可用。(所以它实际上只是一个没有安全要求的本地非生产事物)。
我没想到集成 SSH 服务器会很容易,但令我惊讶的是,我刚刚安装并启动了它,并且不需要做任何其他事情就可以通过 ssh(否EXPOSE 22
或--publish
)连接到机器。
现在,我想通过端口 8080 上的 HTTP 访问容器并进行了修改--publish
,EXPOSE
但仅设法使 HTTP 服务器localhost/127.0.0.1
在主机上可用。所以现在我可以通过
curl http://127.0.0.1:8080/
但我想通过相同的 IP 地址访问这两个服务,但不是 localhost
(例如,容器随机分配的地址对我来说完全没问题)。
很遗憾
curl http://172.17.0.2:8080/
每次我绑它时都等到它超时。
我尝试docker run
了-p 8080
,和更多的组合,一起或不一起,-p 127.0.0.1:8080:8080
但没有成功。-p 172.17.0.2:8080:8080
EXPOSE 8080
Dockerfile
为什么我可以通过端口 22 访问容器而不暴露任何东西?
以及如何通过容器的 IP 地址访问它?
更新:看起来我正在经历这里描述的内容。
解决方案
推荐阅读
- python - Locust 中的选项可以一起运行多个 Locustfile,就像在 Jmeter 中并行运行多个线程组一样
- ms-word - MS Word 条件块在空格后跳过文本
- python - Python 的问题,我的关卡系统的 sqlite3 排行榜命令
- postgresql - 如果字符串是 PostgreSQL 11.0 中另一列的子字符串,则选择行
- java - 如何在有状态 EJB 中获取 UISessionID?
- linux - 删除具有特定名称的所有文件夹的内容
- python - Torch 为多个 GPU 并行化任务
- javascript - 是否可以在 HTML/JS/Fluid 的最小/最大范围之外添加附加值?
- ios - Vapor 代码解释有困难,执行时出现401错误
- angular - 添加 Angular SSR 引发错误发生未处理的异常:npm ERR!代码 ERESOLVE