如何通过环境变量配置Docker中mongos的配置服务器地址
解决方案:用环境变量替换mongos的硬编码配置服务器地址
没问题,这事儿其实很容易实现,Docker Compose原生支持环境变量替换,咱们直接修改你的docker-compose.yml就行,步骤如下:
1. 给服务添加环境变量定义
在你的mongodb服务块里,加入environment字段,定义一个用来存储配置服务器地址的环境变量(比如叫CONFIGDB_ADDR),还可以给它设个默认值,这样不指定的时候也能正常运行。
2. 修改command命令,引用环境变量
把原来硬编码的cfgrs/cfg1:27017替换成${CONFIGDB_ADDR},Docker Compose会自动把环境变量的值填充进去。
修改后的完整代码片段
mongodb: image: mongo:3.6 command: mongos --configdb ${CONFIGDB_ADDR} --bind_ip_all ports: - 27078:27017 networks: - services-net deploy: replicas: 0 environment: - CONFIGDB_ADDR=cfgrs/cfg1:27017 # 默认配置,可按需覆盖
3. 自定义环境变量的几种方式
如果你需要替换这个默认地址,有几种灵活的方法:
- 方法一:使用
.env文件
在docker-compose.yml的同级目录下创建一个.env文件,内容如下:
CONFIGDB_ADDR=your-new-config-server:27017
Docker Compose启动时会自动加载这个文件里的环境变量。
- 方法二:运行时通过命令行传递
启动服务的时候直接用-e参数指定:
docker-compose up -d -e CONFIGDB_ADDR=your-new-config-server:27017
- 方法三:利用系统环境变量
如果你的系统已经设置了CONFIGDB_ADDR这个环境变量,Docker Compose会自动优先使用它(会覆盖.env和服务里的默认值)。
额外提示
如果你的配置服务器是多个节点(比如cfgrs/cfg1:27017,cfgrs/cfg2:27017),直接把环境变量的值设成逗号分隔的字符串就行,mongos命令会正常识别这个格式。
内容的提问来源于stack exchange,提问作者Jordi
相关产品推荐
相关产品推荐

