连接被拒绝泊坞运行
我得到建设我Docker映像档和运行docker run -t imageName
连接被拒绝泊坞运行
我的python脚本正在Web请求(外部API调用),然后在容器内部通信的本地主机连接后拒绝: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
:
每次运行容器都有自己的网络接口。做EXPOSE 5000
告诉码头将端口5000 从容器网络接口链接到主机中的随机端口(请参阅docker ps
),只要您告诉码头工人在docker run
与-P
之间执行此操作。
关于logstash。
如果您的logstash安装在您的主机或其他容器中,这意味着logstash不在容器的“本地主机”中(请记住,每个容器都有自己的网络接口,每个容器都有自己的网络接口localhost
) 。所以你需要正确地指向logstash。
怎么样?
方法1:
不要给容器自身的iterface,所以它具有相同的localhost
为您的机器:
docker run --net=host ...
方法2:
如果您使用的是docker-compose,请使用docker网络链接。即:
services:
py_app:
...
links:
- logstash
logstash:
image: .../logstash..
那么一点,因为这:logstash:5000
(泊坞窗将名称解析为相应logstash
内部IP)
方法3:
如果logstash在听你的localhost:5000
(来自你的主机),你可以从你的容器中指向它:172.17.0.1:5000
(172.17.0.1
是host
固定的IP,但这个选项不太优雅,可以说)
感谢!我绝对可以修改logstash作品。有趣的是,我的代码首先发出一个API请求(在python脚本中)来拉动一些JSON,然后将它放到logstash上。 “拒绝连接”是否是试图访问互联网以进行此API调用的容器?我假设它也会阻止尝试达到logstash,但API调用是第一次。感谢你的帮助。 – HectorOfTroy407
然后你应该看到这样的连接拒绝作为python异常,向你显示错误的代码行。什么是完整的错误信息? – Robert
当使用puppet伪造的docker-platform模块时,请注意,类docker :: run的$ net参数默认为'bridge'。将它设置为'host'(上面的方法1)解决了我在https://docs.docker.com/registry/deploying/下面的教程。 – Schuh
当我使用Docker来暴露端口时,我总是必须使用'-P srd:dst'标志......我认为如果你将它链接到另一个端口docker image with the -L flag ...或者使用docker ps'来查看它映射到的实际端口 –