我在将堆栈部署到使用docker-machine
.
所有服务都在同一个网络中,并且在本地运行时,docker-compose run..
我在使用服务名称作为主机名连接服务时没有问题,例如:
# docker-compose.yml
---
version: '3'
services:
app:
build: .
# ...
depends_on:
- db
db:
image: postgres:9.6
我们正在谈论一个 Ruby 应用程序,数据库配置如下;
# database.yml
---
default: &default
# ... typical stuff
username: postgres
host: postgres # The name of the service in docker-compose.yml
development:
<<: *default
production:
<<: *default
host: <%= ENV['DATABASE_HOST'] %>
database: <%= ENV['DATABASE_NAME'] %>
username: <%= ENV['DATABASE_USERNAME'] %>
password: <%= ENV['DATABASE_PASSWORD'] %>
AFAIK 这在本地开发时看起来很标准。事实上,服务使用服务名作为主机名app
正确连接到服务。postgres
这也发生在一个sidekiq
服务和一个服务上rabbitmq
。
问题是,我几乎 100% 确定我遗漏了一些非常基本的东西,当我将堆栈部署到一个集群时,服务无法看到彼此,所以当我检查一些服务的日志时我看到连接被拒绝app
服务。
我不太确定是否必须在管理器节点中配置某些内容,或者该管理器是否能够管理主机名和服务名以及物理地址之间的路由。
如果有人能让我正确地了解如何配置服务以部署到集群,我将不胜感激。正如我所提到的,这是在一个本地集群中完成的,其中 3 个节点使用创建docker-machine create...
并且我已经运行了eval $(docker-machine env manager-node)
.
提前致谢!