Docker,独立多个rails实例
Docker, independent multiple rails instances
我想创建一个具有多个微服务的开发环境 运行ning 就像在生产环境中一样。
我想 运行 和 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))
问题是我可以使用浏览器访问所有这些。
对于 OSX 使用 VirtualBox 的 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/
,我可以访问其他服务。但是,无论如何,有更好的方法吗?
终于实现了调用外部服务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 作为外部 link 并且在另一个方向发生同样的情况,builds
变得难以管理。
我想创建一个具有多个微服务的开发环境 运行ning 就像在生产环境中一样。
我想 运行 和 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))
问题是我可以使用浏览器访问所有这些。
对于 OSX 使用 VirtualBox 的 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/
,我可以访问其他服务。但是,无论如何,有更好的方法吗?
终于实现了调用外部服务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 作为外部 link 并且在另一个方向发生同样的情况,builds
变得难以管理。