Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker 无法从主机访问容器中运行的服务器_Docker_Dockerfile_Docker Container - Fatal编程技术网

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

Docker 无法从主机访问容器中运行的服务器,docker,dockerfile,docker-container,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 出于某种原因,当我使用浏览器访问localhos

我有一个简单的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
)之后,docker应用程序成功启动,并且看起来端口暴露已正确完成

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

docker ps 
并检查“端口”部分

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

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

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

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

我能想到的最后一件事是,在docker容器本身中,应用程序并没有真正响应端口3000(我的意思是,可能启动脚本会在其他端口上启动web服务器,因此公开端口3000并没有真正起到任何作用)

为了检查这一点,您可以使用类似于
docker exec-it
bash的内容输入docker容器本身


并使用
lsof-i
检查打开的端口,或者仅从容器itelf中检查
wget 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:
我使用环回

您是否执行了docker容器并对其进行了测试。hmmm它在容器外部工作,并且在容器内部运行时日志记录看起来很好,我可以验证它是否在正确的端口上侦听,etcDoes
docker run
记录任何错误?(您甚至可以粘贴整个输出,这将有助于调试问题)其次,你如何准确地启动这个服务器(查看Dockerfile,在容器的开头它将运行
/app/bin/huru
,没有任何参数)是的
docker ps
给了我
0.0.0:3000->3000/tcp
,所以是的,idkI认为这可能是golang的事情,不应该有防火墙问题,tmk,从容器中出来的日志显示golang代码工作,golang服务器在容器中运行,并在正确的端口上侦听。侦听“0.0.0.0”而不是“localhost”使其工作!哈哈,fml,为什么???我希望我知道更多关于网络的知识