连接拒绝docker运行
build立我的Docker镜像并运行docker run -t imageName
后,我得到一个连接被拒绝
在容器内部,我的python脚本正在做Web请求(外部API调用),然后通过localhost:5000与logstash套接字进行通信。
我的dockerfile非常简单:
FROM ubuntu:14.04 RUN apt-get update -y RUN apt-get install -y nginx git python-setuptools python-dev RUN easy_install pip #Install app dependencies RUN pip install requests configparser EXPOSE 80 EXPOSE 5000 #Add project directory ADD . /usr/local/scripts/ #Set default working directory WORKDIR /usr/local/scripts CMD ["python", "logs.py"]
但是,当我尝试运行此操作时,出现[ERROR] Connection refused
消息。 对我来说,我在这里做错了什么不是很明显 – 我相信我会向外界开放80和5000? 这是不正确的? 谢谢。
关于EXPOSE
:
您运行的每个容器都有自己的networking接口。 通过EXPOSE 5000
告诉EXPOSE 5000
将端口5000 从容器networking接口链接到主机中的一个随机端口(只要您使用docker ps
查看),只要您告诉docker在docker run
使用-P
。
关于logstash。
如果你的logstash被安装在你的主机或另一个容器中,这意味着logstash不在容器的“localhost”中(记住每个容器都有自己的networking接口,每个容器都有自己的localhost
)。 所以你需要正确的指向logstash。
怎么样?
方法1:
不要给容器自己的iterface,所以它有和你的机器一样的localhost
:
docker run --net=host ...
方法2:
如果您使用的是docker-compose,请使用dockernetworking链接。 即:
services: py_app: ... links: - logstash logstash: image: .../logstash..
所以指向这个: logstash:5000
( logstash:5000
会把这个名字parsing成对应于logstash
的内部IP)
方法3:
如果logstash监听localhost:5000
(从你的主机),你可以从你的容器内部指向它: 172.17.0.1:5000
localhost:5000
( 172.17.0.1
是host
固定IP,但是这个选项不那么优雅,可以说是)