Docker,独立的多个 Rails 实例

Posted

技术标签:

【中文标题】Docker,独立的多个 Rails 实例【英文标题】:Docker, independent multiple rails instances 【发布时间】: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:3000localhost:3005),但在 Ubuntu 或使用 Docker-beta 时失败。

编辑

我知道 rails-app-A 的“localhost”与 rails-app-B 中的“localhost”是不同的服务器,因为它们作为不同的机器运行。当我拥有 VirtualBox 时,我可以访问,因为我拥有 VirtualBox 实例的 IP (192.169.99.100)。

我现在使用http://localtunnel.me/ 并且可以访问其他服务。但是,无论如何,有更好的方法吗?

【问题讨论】:

【参考方案1】:

最后,我实现了使用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 使其可以使用此名称访问。

我仍然不明白的是如何 build rails-app-A 之前没有打开 rails-app-B。如果 rails-app-A 将 rails-app-B 作为外部链接,并且在另一个方向上发生同样的情况,builds 将变得无法管理。

【讨论】:

以上是关于Docker,独立的多个 Rails 实例的主要内容,如果未能解决你的问题,请参考以下文章

Docke及Docker Compose于微服务的实践

docker多个容器连接 将 Rails 程序部署到 Docker 容器中

Docker 镜像批量备份(导出)

如何将此查询转换为ActiveRecord(Rails 5)

单独服务器上的 nginx proxy_pass 到多个 Rails 应用程序,乘客独立在不同的盒子中具有子 URI

Docke容器介绍