Docker 撰写:NodeJS + MongoDB
Docker Compose : NodeJS + MongoDB
我无法完成我的 docker 写作工作。
这是我的 docker 文件:
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
我的docker-compose.yml
db:
image: mongo
ports:
- 27017
web:
build: .
command: npm start
volumes:
- .:/myapp
ports:
- 3000:3000
links:
- db
environment:
PORT: 3000
在server.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);
从这个 repo 复制:https://github.com/projectweekend/Node-Backend-Seed
但是 process.env.DB_1_PORT
是空的。 如何添加?
谢谢
你的 docker-compose 应该是
environment:
- MONGODB=3000
有关映射环境变量的详细信息,请参阅 this link。您将环境变量声明为 PORT
而不是 MONGODB
.
对不起@gettho.child,我太快接受了你的回答。我以为它在工作,但事实并非如此。我将在这里报告我的最终解决方案,因为我一直在努力实现它。
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
有趣的app.js摘录:
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);
并查找 mongo 的 IP。
最后的 URL 应该是这样的:mongodb://172.17.0.76:27017/myapp
祝你好运,值得,Docker太棒了!
编辑:
如果上述方法有效,我现在通过 运行 找到了一个与技术无关的工作流程:
docker-compose run web /bin/bash
- 在那里 运行
printenv
我希望这不是过多的自我推销,但我写了一篇关于这个主题的双篇文章,可能会对一些读者有所帮助:https://augustin-riedinger.fr/en/resources/using-docker-as-a-development-environment-part-1/
干杯
确保 'Server.js' 文件中的 mongoDB IP(和端口)设置为 'PORT_27017_TCP_ADDR'(也检查端口)- 可以在 运行 'docker exec {web app container id} env'.
因为我们使用 docker-compose.yml
和 db
的可靠连接网络服务(在本例中为 mondoDB),所以最终的 MONGO_DB
连接字符串应该是这样的(没有授权和额外的参数)如下:
mongodb://db:27017/myapp
其中:
- db - docker-composer MongoDB 服务的名称
- myapp - mongoDB 数据库的名称
更多见
我无法完成我的 docker 写作工作。
这是我的 docker 文件:
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
我的docker-compose.yml
db:
image: mongo
ports:
- 27017
web:
build: .
command: npm start
volumes:
- .:/myapp
ports:
- 3000:3000
links:
- db
environment:
PORT: 3000
在server.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);
从这个 repo 复制:https://github.com/projectweekend/Node-Backend-Seed
但是 process.env.DB_1_PORT
是空的。 如何添加?
谢谢
你的 docker-compose 应该是
environment:
- MONGODB=3000
有关映射环境变量的详细信息,请参阅 this link。您将环境变量声明为 PORT
而不是 MONGODB
.
对不起@gettho.child,我太快接受了你的回答。我以为它在工作,但事实并非如此。我将在这里报告我的最终解决方案,因为我一直在努力实现它。
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
有趣的app.js摘录:
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);
并查找 mongo 的 IP。
最后的 URL 应该是这样的:mongodb://172.17.0.76:27017/myapp
祝你好运,值得,Docker太棒了!
编辑:
如果上述方法有效,我现在通过 运行 找到了一个与技术无关的工作流程:
docker-compose run web /bin/bash
- 在那里 运行
printenv
我希望这不是过多的自我推销,但我写了一篇关于这个主题的双篇文章,可能会对一些读者有所帮助:https://augustin-riedinger.fr/en/resources/using-docker-as-a-development-environment-part-1/
干杯
确保 'Server.js' 文件中的 mongoDB IP(和端口)设置为 'PORT_27017_TCP_ADDR'(也检查端口)- 可以在 运行 'docker exec {web app container id} env'.
因为我们使用 docker-compose.yml
和 db
的可靠连接网络服务(在本例中为 mondoDB),所以最终的 MONGO_DB
连接字符串应该是这样的(没有授权和额外的参数)如下:
mongodb://db:27017/myapp
其中:
- db - docker-composer MongoDB 服务的名称
- myapp - mongoDB 数据库的名称
更多见