在构建我的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?这不正确吗?谢谢 .
1 回答
关于
EXPOSE
:您运行的每个容器都有自己的网络接口 . 执行
EXPOSE 5000
告诉docker将端口5000从container-network-interface链接到主机中的随机端口(请参阅docker ps
),只要告诉docker在docker run
与-P
时执行此操作 .关于logstash .
如果您的logstash安装在您的主机或另一个容器中,则意味着logstash不在容器的"localhost"中(请记住,每个容器都有自己的网络接口,每个容器都有自己的
localhost
) . 所以你需要正确指向logstash .怎么样?
方法1:
不要给容器自己的iterface,所以它与你的机器具有相同的
localhost
:方法2:
如果您使用的是docker-compose,请使用docker network links . 即:
所以指出:
logstash:5000
(docker会将该名称解析为对应于logstash
的内部IP)方法3:
如果logstash监听
localhost:5000
(来自您的主机),您可以从容器内指向它:172.17.0.1:5000
(172.17.0.1
是host
固定IP,但这个选项不太优雅,可以说)