【发布时间】:2016-10-08 09:46:20
【问题描述】:
我正在尝试创建一个运行多个微服务的开发环境,就像在生产环境中一样。
我想使用 Docker 运行两个 rails applications,在它们之间进行调用。
我知道我可以使用links,但是我总是必须将其中一个作为主控运行。这意味着,我只能调试这个,我想看看他们每个人的控制台输出。也许我做错了什么,这就是我问的原因。
这是我的 docker-compose.yml 文件:
rails-app-A:
build: .
dockerfile: "DockerfileA"
environment:
RAILS_ENV: development
links:
- db
command: bundle exec rails server -p 3005 -b '0.0.0.0'
volumes:
- ".:/home/app"
volumes_from:
- bundle
expose:
- "3005"
ports:
- "3005:3005"
rails-app-B:
build: .
dockerfile: "DockerfileB"
environment:
RAILS_ENV: development
links:
- db
command: bundle exec rails server -p 3000 -b '0.0.0.0'
volumes:
- ".:/home/app"
volumes_from:
- bundle
expose:
- "3000"
ports:
- "3000:3000"
这就是我运行 rails 应用程序的方式:
docker-compose run --service-ports rails-app-A
docker-compose run --service-ports rails-app-B
我总是遇到这样的错误:
Errno::ECONNREFUSED: Connection refused - connect(2) for "localhost" port 3000
Errno::ECONNREFUSED (Failed to open TCP connection to localhost:3000 (Connection refused - connect(2) for "localhost" port 3000))
问题是我可以通过浏览器访问所有这些。
使用 VirtualBox 的 OSX Docker 版本运行良好(只需调用 localhost:3000 或 localhost:3005),但在 Ubuntu 或使用 Docker-beta 时失败。
编辑
我知道 rails-app-A 的“localhost”与 rails-app-B 中的“localhost”是不同的服务器,因为它们作为不同的机器运行。当我拥有 VirtualBox 时,我可以访问,因为我拥有 VirtualBox 实例的 IP (192.169.99.100)。
我现在使用http://localtunnel.me/ 并且可以访问其他服务。但是,无论如何,有更好的方法吗?
【问题讨论】:
标签: ruby-on-rails docker docker-compose microservices