在开发一个使用Heroku CLI进行部署的Ruby应用程序时,我偶然发现了一个问题,试图将整个事情集成到Docker Compose工作流和微服务架构中。
长话短说,我正在运行一个运行命令的容器:heroku local:start -p 5000 (启动本地Heroku服务器并公开端口5000,以便可以在http://localhost:5000上访问Heroku应用程序)。
我将容器的5000端口绑定到主机上的5000端口。当我在主机上访问http://localhost:5000时,我无法访问Heroku应用程序。如果我在非Docker环境中运行该命令,同样的效果也很好。
我对Docker和端口转发非常有经验,所以我几乎可以肯定这个问题不是与撰写文件或端口转发方式有关。这个问题似乎与Heroku CLI有关,以及它如何将端口暴露给运行它的环境。
要重现这个问题,只需签出此提交并运行docker-compose up:https://github.com/Dzhuneyt/12factor/commit/5bdfc417ce57eb916c42fdc76bae51e4df30549c
发布于 2019-04-15 21:55:54
我相信如果您绑定到0.0.0.0,这将会起作用
# Procfile
web: bundle exec ruby web.rb -p $PORT -o 0.0.0.0此外,为了方便起见,为了避免在每个调试周期进行重新构建,我将添加一个卷挂载:
# docker-compose.yml
version: '3'
services:
web:
build: ./
volumes:
- .:/usr/src/app
ports:
- "5000:5000"发布于 2019-04-15 21:56:07
只是为了检查一下基础知识;一旦你启动服务并等待几秒钟,'docker ps‘会显示服务正在运行吗?如果没有,'docker logs {service_name}‘是否提供任何输出?听起来您的网络/端口配置是正确的;这就是我关注服务输出的原因。但是,如果服务正在运行,您能否'telnet localhost 5000‘并接收一个成功的连接?
https://stackoverflow.com/questions/55688102
复制相似问题