Docker Compose容器间通信连接被拒绝问题求助
问题
我有两个通过Docker Compose管理的容器,需要实现容器间通信(从action容器向logic容器发送数据)。
以下是docker-compose.yml配置:
version: '3.4' services: logic: build: context: ./logic dockerfile: Dockerfile ports: - 5000:5000 action: build: context: ./ dockerfile: Dockerfile env_file: - .env ports: - 7071:7071
logic容器的Dockerfile配置如下:
FROM python:3.8 WORKDIR /app COPY . /app RUN pip install --trusted-host pypi.python.org -r requirements.txt EXPOSE 5000 CMD ["python", "app.py"]
按照Docker Compose网络规则,从action容器访问logic容器应使用http://logic:5000地址,但执行curl命令时出现连接被拒绝错误:
root@99e671f7e3d9:/app# curl -X POST -d "key1=value1&key2=value2" http://logic:5000
返回错误:
curl: (7) Failed to connect to logic port 5000: Connection refused
查看logic容器的端口监听情况,netstat显示服务确实在监听5000端口,但只绑定了回环地址:
root@93edd7abe469:/app# netstat -tuln | grep 5000 tcp 0 0 127.0.0.1:5000 0.0.0.0:* LISTEN
尝试通过logic容器的IP访问也无法连接,请问问题出在哪里?
解决方法
- 问题根源:logic容器内的服务仅监听了
127.0.0.1:5000(本地回环地址),这个地址只能被容器自身访问,同一Docker网络内的action容器无法通过该地址建立连接。 - 修复操作:修改logic容器中的
app.py,将服务的监听地址改为0.0.0.0(允许接收来自任意网络接口的请求)。以Flask应用为例,修改启动代码:
if __name__ == '__main__': app.run(host='0.0.0.0', port=5000)
其他Web框架(如FastAPI、Django)需对应调整绑定地址为0.0.0.0,确保服务能接收Docker网络内其他容器的请求。
- 重启容器:重新构建并启动容器使修改生效:
docker-compose down docker-compose up --build
完成以上步骤后,从action容器访问http://logic:5000即可正常通信。
内容的提问来源于stack exchange,提问作者anna_ts
相关产品推荐
相关产品推荐

