读《Docker从入门到实践》
https://yeasy.gitbooks.io/docker_practice/compose/usage.html
中的docker-compose一章,在遇到下面一段代码:
1 | from flask import Flask |
这是一段很简单的代码,但是我写的时候不小心用host='localhost'
代替了,这段代码在本地运行的很好,打开http://localhost:5000
时能正常计数,但是在用docker-compse up
启动之后会报
redis.exceptions.ConnectionError: Error 111 connecting to localhost:6379. Connection refused.
很明显是flask的应用无法访问redis的服务,但是我打开了本地的redis-cli也显示无法连接
docker-compose 日志中,很明显redis的服务是启动在了6379端口,所以肯定是hostname的问题,在docker服务内部无法找到locahost到底是谁,因为localhost是在宿主机里的host文件里面配置的,所以app里面访问locahost来连接redis失败了,这时候要找到redis启动的真正的hostname是redis
使用docker-compose ps命令发现在docker-compose up
启动的时候,自动创建了2个镜像实例counter_web_1
,counter_redis_1
1 | ➜ docker-compose ps |
由于我们在docker-compose.yml文件里面将counter_web_1从docker端口映射到外部网络的5000端口,因此我们才能通过localhost:5000来访问页面,所以加入
我们在redis里面也加上port
1 | version: '2' |
这样的话 我们就能从宿主机来访问docker里面的redis实例了。