Tag: node.js

在运行具有端口转发的容器时,没有从node.js代码获取Docker容器的IP地址

我写了一个基本的node.js代码来获取主机的IP。 代码如下所示: var express = require('express'); var os = require('os'); var app = express(); var interfaces = os.networkInterfaces(); app.get('/',function(req,res){ var addresses = []; for (var k in interfaces) { for (var k2 in interfaces[k]) { var address = interfaces[k][k2]; if (address.family === 'IPv4' && !address.internal) { addresses.push(address.address); } } } res.send("IP address of container : […]

在Google Compute Engine上部署可扩展的MEAN Stack体系结构

我已经在Google计算引擎上部署了一个MEAN Stack应用程序(不使用任何MEAN框架) 。 目前,它部署在一台n1-standard-1虚拟机上(1个虚拟CPU + 3.75GB内存) 。 在里面,我正在运行4个docker集装箱 。 一个用于: 反向代理 – 侦听端口80(http)&443(https)然后代理请求到本地运行的节点实例(端口3000) web应用程序(nodejs + expressjs) MongoDB的 Redis的 我正在使用这个作为我的开发。 环境,现在,因为该网站正在生产(performance相当缓慢)。 我如何重构这个更好的可扩展架构? 我的解决scheme configuration上面configuration至less4个vm。 (每个运行一个Docker容器):反向代理(1 vm),mongodb – (1 vm),redis – (1 vm),app – (多个vm)。 灵活,但有点昂贵? 部署一个更大的VM(更多的CPU和RAM)。 比上面更便宜的select? 理想情况下,我想从小规模开始(花费更less),随着需求的增长,规模也会不断扩大,但架构必须足够灵活,才能轻松扩展。 我可以有一些好的解决scheme吗?

如何从前端js请求链接的容器?

我使用docker-compose构build应用程序。 一个docker集装箱是一个唯一的轨道API应用程序。 其次是有angular度的node.js应用程序。 我需要的是向轨道容器发出POST和GET请求,以便从它获取数据到我的Angular应用程序。 泊坞窗,compose.yml rails_server: build: ./rails_server nodejs_server: build: ./nodejs_server ports: – "80:8080" links: – rails_server 我试图使用docker为我提供的ENVvariables来访问rails容器。 像MICROSERVICEAPP_RAILS_SERVER_1_PORT_3000_TCP_ADDR , MICROSERVICEAPP_RAILS_SERVER_1_PORT_3000_TCP_PORT 。 有envvariables相应地返回172.17.0.2和3000 。 但重点是浏览器客户端无法访问内部的docker专用networking。 所以我无法向我的Rails应用程序发出请求。 我想我可以发送请求回到节点js,然后到轨道,但感觉不对。 我应该如何解决这个问题?

Swagger express在Docker容器中给出了错误

我有一个使用swagger-express-mw库的应用程序,我以下面的方式启动我的应用程序: SwaggerExpress.create({ appRoot: __dirname }, (err, swaggerExpress) => { // initialize application, connect to db etc… } 一切工作正常我的本地OSX机器上。 但是当我使用boot2docker从我的应用程序构build图像并运行它时,出现以下错误: /usr/src/app/node_modules/swagger-node-runner/index.js:154 config.swagger = _.defaults(readEnvConfig(), ^ TypeError: Cannot assign to read only property 'swagger' of [object Object] 我的dockerfile看起来像这样(没有什么特别的): FROM node:latest RUN mkdir -p /usr/src/app WORKDIR /usr/src/app COPY package.json /usr/src/app/ RUN npm set progress=false RUN npm install COPY […]

具有nodeBB redis的Dockerconfiguration不正确?

所以,一切都与我期待redis的项目形象很好地工作。 我能够build立和运行,我很高兴,但在我的config.json内我已经尝试将主机更改为redis , 127.0.0.1和我的虚拟机的IP。 当我在我的容器中运行我的nodeBB我得到这个问题的error: Error: Redis connection to 127.0.0.1:6379 failed – connect ECONNREFUSED 127.0.0.1:6379 "redis": { "host": "127.0.0.1", "port": "6379", "database": "0" } 我真的不知道在哪里指向我的redis?

如何使用Docker Compose在多个节点的Swarm集群上重新创build容器?

当我在Swarm集群中只有一个节点时,遇到了这个问题,当我尝试在这个节点上重新创build我的Web应用程序容器时(我想部署一个正在侦听端口80的Node.JS Web应用程序的新版本) 问题是Swarm首先停止旧的容器,但并没有将其移除 ,然后尝试创build新的容器,由于Swarm也跟踪停止的容器的端口约束,它认为在我的节点端口80上仍在使用中(被停止的容器): Recreating 41910b0283eb_41910b0283eb_41910b0283eb_vagrant_web_1 ERROR: unable to find a node with port 80 available 这个问题可能有两种解决scheme: 在每次部署之前,我可以执行docker-compose stop和docker-compose rm ,它会停止并删除每个正在运行的容器 – 这也将释放Swarm的端口80。 另一个解决scheme是有多个节点并放松。 当compose重新创build容器时,Swarm会自动find一个没有人使用端口80的随机节点,并在另一个节点上启动新的容器。 我可以使用解决scheme1,但我想知道如何让它工作,当我有多个节点。 我的问题与2方法是通常一个Web应用程序需要有一个修复IP我可以用于域名注册。 如果Swarm将我的Web应用程序部署到随机select的节点,那么我该如何解决这个问题? 我可以使用循环法DNS,但我不知道是否会有所帮助,因为在这种情况下,如果我的群集中有3个节点,我需要在每个节点上都有一个我的Web应用程序实例。 但是,如果是这样的话,我不会遇到同样的问题? Swarm会认为有人还在使用端口80,所以它不会find任何有80端口可用的节点。 如何解决这个问题?

节点npmtesting种子postgres,Dockernetworking容器看到不同的结果

我正在对种子postgres数据库运行Angular Node npmtesting。 这在一个环境中工作,但不是另一个。 我已经将图像导出并将其从一个环境移动到另一个环境,结果表明环境而不是泊坞窗图像有所不同。 我也有一切检查到混帐,并完成了图像的清洁版本。 pg = $(docker run -d postgres-seeded) docker run -it –net = container:$ pg nodeapp npm test 这是我见过的作品的matrix,而不是作品 machine | npm test result mac os X – docker 1.10.3 | success | webstorm local to docker to post-| gres-seeded – mac os X docker | success | amazon ami on […]

为什么不启动容器?

我的docker-compose文件很简单: npm: image: node volumes: – C:\Users\Samir\npm\:/home/dev container_name: npm 当我运行它时: docker-compose up -d 我得到: Starting npm 然后,没有任何反应: docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 任何想法?

返回函数外的值

我正在寻找使用graphQL来查询docker机api,并获得反应dockerpipe理员风格项目的容器列表。 我正在使用dockerode一个NPM模块来提出请求。 第一个函数getCOntainerById是我通常会从rethinkdb返回一些项目。 我似乎无法弄清楚如何返回docker.listContainers函数中的容器数组,因为它只在范围内定义,在fetchContainers函数返回结束时未定义。 import Docker from 'dockerode' var docker = new Docker({host: 'http://127.0.0.1', port: 52376}); export default { getContainerById: { type: Container, args: { id: {type: new GraphQLNonNull(GraphQLID)} }, async resolve(source, {id}, {rootValue}) { isLoggedIn(rootValue); const container = await r.table('containers').get(id); if (!container) { throw errorObj({_error: 'Container not found'}); } return container; } }, fetchContainers: […]

使用Volumes概念自动呈现代码中所做的更改(在Docker VM中运行的节点应用程序)

现在,在.jade文件中所做的更改将自动呈现在Web UI上,但在node.js文件中所做的代码更改不是呈现,到目前为止,这里是我的docker-compose.yml文件 www: build: . volumes: – ./:/app_ww ports: – "80:3000" expose: – "80" 这里是我的dockerfile FROM node:4.4.1 RUN mkdir -p app_ww WORKDIR /app_ww ADD package.json package.json RUN npm install ADD . . CMD ["npm","start"] 我没有完成我所需的工作。 即自动呈现代码中所做的更改。 所以,这里是通过$docker-compose up –buildbuild立版本库在系统中创build的卷列表: $ docker volume ls DRIVER VOLUME NAME local app_ww Package.JsOn文件: { "name": "node_restapi", "version": "0.0.0", "private": […]