我有一个在docker容器上运行的rest api服务器。服务器在Docker容器的端口8000上运行,并且主机的端口8081绑定到容器的端口8000。通过连接到容器并执行curl localhost:8000,我可以看到其余api服务器在容器内运行正常。通过执行docker inspect,我可以看到端口装箱是预期的。但是,当我从主机PC浏览localhost:8081时,出现ERR_CONNECTION_REFUSED错误。以下是我的一些docker设置和日志。有关如何解决此问题的任何想法?
# Docker compose File
version: "3"
services:
genie:
network_mode: host
build:
context: app
dockerfile: Dockerfile
restart: unless-stopped
ports:
- "8081:8000"
env_file:
- ./.env
volumes:
- ./app:/home/genie/app
entrypoint:
- bin/server
# Docker inpsect result on the running container
"PortBindings": {
"8000/tcp": [
{
"HostIp": "",
"HostPort": "8081"
}
]
},
答案 0 :(得分:1)
您需要将容器内的应用程序配置为侦听所有接口,而不仅仅是本地主机。 Docker网络具有名称空间,因此只有容器内部的进程才能访问localhost,就像与笔记本电脑在同一网络中的其他计算机无法访问笔记本电脑上仅监听localhost的应用程序一样。
此更改是特定于应用程序的,我们在此问题中没有详细信息。但是,如果将其配置为127.0.0.1,则可以将其更改为0.0.0.0。