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:3000
或localhost: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理。