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

标签 docker dockerfile docker-container

我有一个简单的 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 时,我得到了

enter image description here

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

最佳答案

如果您看到应用程序的日志,则根据问题中提供的信息 ( 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> 的内容进入 docker 容器本身。庆典

并使用 lsof -i 检查打开的端口或者只是 wget localhost:3000从容器本身

关于docker - 无法从主机访问在容器中运行的服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53137501/

相关文章:

docker - Docker-如何仅在集群中的所有其他容器中的一个容器中执行调度任务(cron)?

angular - 使用我的 Angular 应用程序创建一个Docker容器

asp.net - Docker-Windows IIS镜像- 'Remove-Website'无法识别为内部或外部命令,

bash - 如何在 Dockerfile 中设置命令历史记录

使用 nvidia 运行时构建 docker

postgresql - 无法使用 docker build 连接到 postgres 数据库

docker - 如何在docker容器中正确安装npm包

docker - Docker从配置的端口开始

scala - 如何在可执行文件之前将 Java_opts 传递到 dockerfile 中的入口点?

ruby-on-rails - 部署docker-composer镜像时出现困惑