Лично, когда я хочу сделать это, я устанавливаю переменную ENV
в Dockerfile следующим образом:
ENV DATABASE_HOST db
Вы можете иметь полную документацию по справке Dockerfile .
Затем в исходном коде Node.js вам нужно знать, установлен DATABASE_HOST
или нет (я могу перенаправить вас на этот пост Переполнения стека. Jayesh: читать переменные среды вNode.js ):
var dbHost = 'localhost';
if (process.env.DATABASE_HOST) {
dbHost = process.env.DATABASE_HOST;
}
или в одну строку:
var dbHost = process.env.DATABASE_HOST || 'localhost';
Тогда для подключения MongoDB:
var mongodbConnection = 'mongodb://' + dbHost + ':27017/mycollection'
Теперь, когда выЧтобы запустить контейнер, необходимо связать контейнер в команде docker run
с --link <your mongodb container>:db
(поскольку db
- это значение, установленное в переменной ENV
).
Но ,Вы также можете использовать опцию -e DATABASE_HOST=<somthing else>
(снова с командой docker run
) и использовать контейнер MongoDB под другим именем: -e DATABASE_HOST=anotherOne --link mongo:anotherOne
.
И снова, вы можете использовать внешнюю MongoDB, не связывая ни один контейнересли вы хотите (которого нет в другом контейнере, возможно): -e DATABASE_HOST=www.mymongo.com
.
РЕДАКТИРОВАТЬ: Это решениеn может быть лучше, чем просто определить, запущено ли приложение в контейнере Docker, потому что с этим ваш код может использоваться где угодно.