无法从主机访问容器中的服务器 运行

Cannot access server running in container from host

我有一个简单的 Dockerfile

FROM golang:latest
RUN mkdir -p /app
WORKDIR /app
COPY . .
ENV GOPATH /app
RUN go install huru
EXPOSE 3000
ENTRYPOINT /app/bin/huru

我是这样建造的:

docker build -t huru .

和运行像这样:

docker run -it -p 3000:3000 huru

出于某种原因,当我使用浏览器访问 localhost:3000 时,我得到

我之前已经将容器中的服务器运行暴露给主机,所以不确定发生了什么。

根据问题中提供的信息,如果您看到应用程序的日志 (docker logs <container_id>) 比 docker 应用程序成功启动,看起来端口公开已正确完成。

在任何情况下,为了在容器启动时查看端口映射 运行,您可以使用:

docker ps 

并检查 "PORTS" 部分

如果你看到类似 0.0.0.0:3000->3000/tcp

那我可以考虑一些防火墙规则来阻止应用程序被访问...

另一个可能的原因(尽管您可能已经检查过了)是应用程序在您实际尝试在浏览器中访问它之前启动和完成。

在这种情况下,docker ps 不会显示退出的容器,但 docker ps -a 会。

我能想到的最后一件事是,在 docker 容器本身中,应用程序并没有真正响应端口 3000(我的意思是,启动脚本可能会在其他端口启动 Web 服务器,所以暴露端口 3000 并没有真正做任何有用的事情。

为了检查这一点,您可以使用 docker exec -it <container_id> bash

之类的内容进入 docker 容器本身

并在容器 itelf

中使用 lsof -iwget localhost:3000 检查打开的端口

试试这个,如果有任何输出日志。请检查它们...

FROM golang:latest
RUN apt -y update
RUN mkdir -p /app
COPY . /app
RUN go install huru
WORKDIR /app

docker build -t huru:latest .
docker run -it -p 3000:3000 huru:latest bin/huru

试试这个 url:http://127.0.0.1:3000 我使用环回