我试图创建一个包含多个微服务的开发环境,就像在生产环境中一样。
我想与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 app的方式:
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中失败。
我理解" localhost"对于rails-app-A是一个不同的服务器,因为" localhost"在rails-app-B中,因为它们作为不同的机器运行。当我有VirtualBox
时我可以访问,因为我有VirtualBox实例的IP(192.169.99.100)。
我现在正在使用http://localtunnel.me/
,我可以访问其他服务。但是,无论如何,有更好的方法吗?
答案 0 :(得分:0)
最后,我实现了使用external_link
调用外部服务:
rails-app-A:
build: .
dockerfile: "DockerfileA"
environment:
RAILS_ENV: development
links:
- db
external_links:
- app_B
...ommited lines...
app_B
应该是一个正在运行的容器,之前执行过如下:
docker-compose run --service-ports --name app_B rails-app-B
添加此--name app_B
可以使用此名称进行访问。
我还不明白如何在没有先前打开rails-app-B的情况下build
rails-app-A。如果rails-app-A将rails-app-B作为外部链接,而另一方向发生同样的情况,则builds
将变得无法管理。