Docker 容器无法使用特定端口访问本地主机
Posted
技术标签:
【中文标题】Docker 容器无法使用特定端口访问本地主机【英文标题】:Docker container unable to access local host with specific port 【发布时间】:2021-11-21 11:26:53 【问题描述】:在此之前,我的 docker 技能不是很好,如果答案很明显,请道歉。
TLDR:本地运行的网站,我需要指定要访问的端口,如何允许 docker 容器访问该网站?
更多信息:
我有两个在本地运行的网站:
第一个是 localapp.company.com,它是一个 IIS 站点 另一个是localnewapp.company.com,由vue-cli-service serve
在本地运行,只能通过指定端口localnewapp.company.com:8081
访问
我正在尝试通过 docker 容器并行化我们的 cypress 测试
其中IPv4_ADDRESS
= 我的本地 IP 地址,这是我的 docker-compose.yml 文件:
version: '3.2'
services:
cypress:
build: .
working_dir: /e2e
extra_hosts:
localnewapp.company.com: IPv4_ADDRESS
localapp.company.com: IPv4_ADDRESS
entrypoint: cypress run --headless --browser chrome --config-file ./cypress.json --record --key KEY --parallel --ci-build-id $GITHUB_RUN_ID
volumes:
- ./:/e2e
赛普拉斯可以运行针对 localapp 的测试,但针对 localnewapp 失败。
使用 Docker CLI,我尝试运行:
curl localapp.company.com
返回有效响应。
curl localnewapp.company.com:8081
连接失败。
不知道从这里去哪里。任何建议将不胜感激。
编辑:
澄清一下,在本地,node.exe
正在使用端口 8081,它在本地为网站提供服务。
【问题讨论】:
【参考方案1】:您需要从您的cypress
服务中公开一个端口
ports:
- HOST_PORT:CONTAINER_PORT
喜欢:
version: '3.2'
services:
cypress:
..
volumes:
- ./:/e2e
ports:
- 8081:8080
见documentation
【讨论】:
谢谢@dnltinney,我已经尝试过了,但出现以下错误:Error response from daemon: Ports are not available: listen tcp 0.0.0.0:8081: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted.
端口8081
很可能正在使用中。您可以通过nc -zv localhost 8081
验证这一点。你试过不同的端口吗?
端口 8081 正在被 localnewapp.company.com 使用,该端口通过命令 vue-cli-service serve
在本地运行,因此它与 node.exe
一起使用以上是关于Docker 容器无法使用特定端口访问本地主机的主要内容,如果未能解决你的问题,请参考以下文章
无法从 docker 容器中访问 MacOSX 主机上的端口