gpt4 book ai didi

python - 连接被拒绝 Docker 运行

转载 作者:太空宇宙 更新时间:2023-11-04 02:49:54 26 4
gpt4 key购买 nike

在构建我的 Docker 镜像并运行 docker run -t imageName 后,我遇到连接被拒绝的问题

在容器内,我的 python 脚本发出网络请求(外部 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:

您运行的每个容器都有自己的网络接口(interface)。执行 EXPOSE 5000 告诉 docker 将端口 5000 container-network-interface 链接到主机中的随机端口(使用 docker ps 查看它>),只要你在使用 -P docker run 时告诉 docker 执行此操作即可。

关于 logstash。

如果你的logstash安装在你的宿主机上,或者安装在另一个容器中,这意味着logstash不在容器的“localhost”中(记住每个容器都有自己的网络接口(interface),每个容器都有自己的本地主机)。所以你需要正确地指向 logstash。

如何?

方法一:

不要给容器自己的接口(interface),所以它和你的机器有相同的localhost:

docker run --net=host ...

方法二:

如果您使用的是 docker-compose,请使用 docker 网络链接。即:

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

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


方法三:

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

关于python - 连接被拒绝 Docker 运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44208465/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com