Докер Сочинять: NodeJS + MongoDB
Я не могу заставить моего докера сочинять работу.
вот мой dockerfile:
FROM node:0.12
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev
RUN mkdir /myapp
WORKDIR /myapp
ADD . /myapp
RUN npm install
мой докер-сочинять.в формате YML
db:
image: mongo
ports:
- 27017
web:
build: .
command: npm start
volumes:
- .:/myapp
ports:
- 3000:3000
links:
- db
environment:
PORT: 3000
и на сервере.js:
var MONGO_DB;
var DOCKER_DB = process.env.DB_1_PORT;
if ( DOCKER_DB ) {
MONGO_DB = DOCKER_DB.replace( "tcp", "mongodb" ) + "/dev_db";
} else {
MONGO_DB = process.env.MONGODB;
}
mongoose.connect(MONGO_DB);
С дублируются из этого РЕПО: https://github.com/projectweekend/Node-Backend-Seed но!--3--> - это пустое. как я могу добавить это?
спасибо
3 ответов
извините @gettho.дитя, я принял твой ответ слишком быстро. Я думал, что это работает, но это не так. Я сообщу здесь о своем окончательном решении, так как я боролся за его достижение.
Dockerfile
:
FROM node:0.12
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev libkrb5-dev
RUN mkdir /myapp
WORKDIR /myapp
ADD package.json /myapp/package.json
RUN npm install
ADD . /myapp
docker-compose.yml
:
db:
image: mongo
ports:
- "27017:27017"
command: "--smallfiles --logpath=/dev/null"
web:
build: .
command: node app.js
volumes:
- .:/myapp
ports:
- "3000:3000"
links:
- db
environment:
PORT: 3000 # this is optional, allows express to use process.env.PORT instead of a raw 3000
и интересное приложение.Яш экстракты:
var MONGO_DB;
var DOCKER_DB = process.env.DB_PORT;
if ( DOCKER_DB ) {
MONGO_DB = DOCKER_DB.replace( 'tcp', 'mongodb' ) + '/myapp';
} else {
MONGO_DB = process.env.MONGODB;
}
var retry = 0;
mongoose.connect(MONGO_DB);
app.listen(process.env.PORT || 3000);
о process.env.DB_PORT
Я пробовал много вещей вокруг. Если это не сработает из коробки, я предлагаю console.log(process.env);
и ищите IP-адрес монго.
окончательный URL должен выглядеть так:mongodb://172.17.0.76:27017/myapp
удачи, это стоит того, Докер удивительный!
EDIT:
если выше работает, я теперь нашел техно-агностический рабочий процесс, запустив:
docker-compose run web /bin/bash
- и там работает
printenv
Я надеюсь, что это не слишком много саморекламы, но я написал двойную статью на эту тему, которая может помочь некоторым читателям: https://augustin-riedinger.fr/en/resources/using-docker-as-a-development-environment-part-1/
Ура
убедитесь, что mongoDB IP (и порт)на вашем сервере.файл js имеет значение "PORT_27017_TCP_ADDR" (проверьте порт тоже) - можно найти при запуске "docker exec {Web app container id} env".
ваш docker-compose должен быть
environment:
- MONGODB=3000
посмотреть этой ссылке для получения дополнительной информации о сопоставлении переменных среды. Вы объявляете переменную среды как PORT
вместо MONGODB
.