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

时间:2018-11-04 03:27:15

标签: 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

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

2 个答案:

答案 0 :(得分:1)

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

无论如何,要在容器启动和运行时查看端口映射,可以使用:

docker ps 

并检查“端口”部分

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

的内容

然后,我可以考虑一些阻止应用程序访问的防火墙规则...

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

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

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

为了进行检查,您可以使用docker exec -it <container_id> bash之类的东西输入docker容器本身

并使用lsof -i或仅从容器itelf中的wget localhost:3000检查打开的端口

答案 1 :(得分:1)

如果有任何输出日志,请尝试执行此操作。请检查一下...

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