如何读取mongo-init.js
中的env变量?docker-compose.yml
可以从.env
文件读取,但mongo-init.js
不能,因为mongo-init.js
将复制到/docker-entrypoint-initdb.d
卷(不确定我是对是错)。这意味着mongo-init.js
将process.env.MONGODB_USERNAME
读取为undefined
。
在复制到/docker-entrypoint-initdb.d
之前,是否可以先将env
值转换为mongo-init.js
docker-compose.yml
version: '2'
services:
mongodb:
image: mongo:4.4.2
restart: always
container_name: local-mongodb
environment:
MONGO_INITDB_ROOT_USERNAME: ${MONGODB_ROOT_USERNAME}
MONGO_INITDB_ROOT_PASSWORD: ${MONGODB_ROOT_PASSWORD}
ports:
- ${MONGODB_PORT}:27017
volumes:
- mongodb_database:/data/db
- ./mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js
volumes:
mongodb_data:
mongo-init.js
require('dotenv').config()
print('mongo init start --------------------');
const pms = db.getSiblingDB(process.env.MONGODB_DATABASE)
pms.createUser({
user: process.env.MONGODB_USERNAME,
pwd: process.env.MONGODB_PASSWORD,
roles: [
{
role: 'readWrite',
db: process.env.MONGODB_DATABASE,
},
],
});
print('mongo init end --------------------');
.环境
MONGODB_ROOT_USERNAME=root
MONGODB_ROOT_PASSWORD=password
MONGODB_DATABASE=product
MONGODB_USERNAME=user
MONGODB_PASSWORD=password
MONGODB_PORT=27017
3条答案
按热度按时间70gysomp1#
我相信以优雅的方式实现您想要的最好方法是使用direnv。
溶液
建议的解决方案使用以下文件:
.env
.envrc
docker-compose.yml
create_mongo_init.sh
up.sh
方向
首先,确保您安装了direnv。
Dock-合成文件
编辑
docker-compose.yml
文件并确保其如下所示:.env
文件创建创建
.env
文件并输入:.envrc
文件创建输入您的终端:
您应看到如下输出:
加载环境变量
因此,在终端中键入:
如果您的Direnv安装正常,它将加载变量并输出以下内容:
Mongo初始化脚本
使用以下命令创建名为
create_mongo_init.sh
的文件:启动脚本
创建一个名为
up.sh
的文件,其内容如下:然后输入以下命令运行它:
deyfvvtc2#
这会帮到某人的!
Docker-compose.yml
mongo-entrypoint.sh
.环境
mitkmikd3#
以下代码在mongo中工作:6.0.4 docker图像。
mongo-init.js
.env文件
docker-compose.yml