我是Docker的新手,我正在尝试将我用Golang编写的该应用程序进行Docker化。这是一个简单的Web服务器,可与Rabbitmq和mongodb进行交互
它将凭据形成一个toml文件并将其加载到配置结构中,然后在端口3000上启动应用程序服务器。这些是凭据
mongo_server = "localhost"
database = "collect_db"
rabbitmq_server = "amqp://guest:guest@localhost:5672/"
如果无法连接到这些URL,它将失败并显示错误。以下是我的docker-compose.yml
version: '3'
services:
rabbitmq:
image: rabbitmq
ports:
- 5672:5672
mongodb:
image: mongo
ports:
- 27017:27017
web:
build: .
image: palash2504/collect
container_name: collect_service
ports:
- 3000:3000
depends_on:
- rabbitmq
- mongodb
links: [rabbitmq, mongodb]
但是它无法与用于本地开发的URL上的Rabbitmq连接,即amqp://guest:guest@localhost:5672/
我意识到,rabbitmq容器可能在配置文件中提供的地址以外的其他地址上运行。
我想知道设置任何环境凭证的正确方法,以便能够将我的应用程序连接到Rabbitmq。
还有什么方法最适合更改我的应用程序代码以初始化与外部服务的连接?我当时正在考虑放弃config.toml文件,并使用os.Getenv和os.Setenv来获取连接的URL。
答案 0 :(得分:2)
本地主机地址可以在本地解析。因此,它们将无法在容器内部工作,因为它们将寻找本地地址(即在容器内部)。
服务可以通过使用服务名称作为地址来相互访问。因此,例如,您可以在网络容器中定位mongodb
。
您可以试一下:
mongo_server = mongodb
database = "collect_db"
rabbitmq_server = "amqp://guest:guest@rabbitmq/"
建议在撰写文件本身中设置服务目标环境变量:
#docker-compose.yml
#...other stuff...
web:
#...other stuff...
environment:
RABBITMQ_SERVER: rabbitmq
MONGO_SERVER: mongodb
depends_on:
- rabbitmq
- mongodb
这使您可以在单个位置进行配置调整。
作为旁注,在我看来links: [rabbitmq, mongodb]
可以删除。并且我建议不要更改容器名称(除非必要,请删除container_name: collect_service
)