首页 文章

连接拒绝Docker运行

提问于
浏览
2

在构建我的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 回答

  • 2

    关于 EXPOSE

    您运行的每个容器都有自己的网络接口 . 执行 EXPOSE 5000 告诉docker将端口5000从container-network-interface链接到主机中的随机端口(请参阅 docker ps ),只要告诉docker在 docker run-P 时执行此操作 .

    关于logstash .

    如果您的logstash安装在您的主机或另一个容器中,则意味着logstash不在容器的"localhost"中(请记住,每个容器都有自己的网络接口,每个容器都有自己的 localhost ) . 所以你需要正确指向logstash .

    怎么样?

    方法1:

    不要给容器自己的iterface,所以它与你的机器具有相同的 localhost

    docker run --net=host ...
    

    方法2:

    如果您使用的是docker-compose,请使用docker network links . 即:

    services:
      py_app:
        ...
        links:
          - logstash
      logstash:
         image: .../logstash..
    

    所以指出: logstash:5000 (docker会将该名称解析为对应于 logstash 的内部IP)


    方法3:

    如果logstash监听 localhost:5000 (来自您的主机),您可以从容器内指向它: 172.17.0.1:5000172.17.0.1host 固定IP,但这个选项不太优雅,可以说)

相关问题