Docker,独立的多轨实例

我尝试创build一个开发环境,其中包含多个运行在生产环境中的微服务。

我想运行在它们之间进行调用的Docker两个rails applications

我知道我可以使用links ,但是通过这个links ,我总是必须将其中的一个作为主链接。 这意味着,我只能debugging这个,我想看看他们每个的控制台输出。 也许我做错了,这就是为什么我问。

这是我的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-testing版,是失败的。

编辑

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

我现在使用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作为外部链接,并且在另一个方向发生同样的情况,则builds变得难以pipe理。