docker - 在 Ubuntu 虚拟机中访问 Docker 容器端口
问题描述
192.168.10.35
给定一个在 (IP: )内部运行 docker 映像的 Ubuntu VMWare 机器 (IP : 172.0.18.2
) 并考虑到这一点docker-compose.yml
,我将如何从本地机器访问 Docker 映像?
version: '3'
services:
sc2:
build: .
ports:
- 127.0.0.1:4620:80
restart: always
networks:
- default
volumes:
- ./sc2ai:/sc2ai
- ./apache/000-default.conf:/etc/apache2/sites-available/000-default.conf
networks:
default:
我试图访问192.168.10.35:4620
但连接失败。我错过了什么?docker-compose 中是否有一个选项丢失或者我需要将虚拟机内部的端口转发到 docker 映像?
PS:如果我在docker-for-windows
本地机器上启动图像,我可以通过http://localhost:4620
.
解决方案
您不能,因为您已明确声明容器(而非映像)只能从 VM 本身访问。宣言
ports:
- 127.0.0.1:4620:80
将主机上端口 4620 上的入站连接转发到容器中的端口 80,但仅在绑定到 127.0.0.1 的接口上,这是专用的环回接口(通常命名为lo
)。当您尝试从主机联系它时,它会到达 VM 的外部 IP 192.168.10.35,但那里没有任何东西在监听。
如果您删除显式端口绑定,Docker 将侦听所有接口,这通常是您想要的,然后您应该能够通过 VM 的外部 IP 地址访问容器。
ports:
- '4620:80'
(术语:图像是一组静态文件系统内容;您从图像启动容器并与正在运行的容器建立网络连接。您无法直接看到图像内部的内容,图像没有任何正在运行的进程,并且您无法单独连接到图像。)
推荐阅读
- python - 无法在使用迁移学习训练的 ResNetV2 模型中配置预测图像
- excel - 来自单元格的excel中的动态引用
- javascript - 在第三方 Web 面板中下载 PDF 错误
- c++ - 在 C++ 上覆盖运算符时促进 MOVE 操作的正确方法
- django - 在 ListView 中搜索查询完全匹配,重定向到 DetailView - Django
- mesh - 在 CGAL 中,可以将超过三个维度的三角剖分转换为多面体吗?
- java - 集成测试的执行顺序在 Srping Boot 中不起作用(
- python - Python BeautifulSoup | 提高按 ID 查找功能的性能和多功能性?
- android - 根布局 getWidth() 是否总是等于屏幕宽度
- azure - 从 Azure 博客容器中删除文件