Tag: docker compose

npm安装一个docker-compose项目

我有一个dockerized项目,有三个应用程序和三个数据库。 这三个应用程序是写在节点和像往常一样使用npm 。 我有一个克隆三个docker-compose.yaml的脚本, docker-compose.yaml安装了三个容器,并为这三个项目中的每一个都使用了一个Dockerfile ,基本上只是做一个npm install并运行它们。 这一切工作都很好,但是这个练习的整个目的是使项目集群易于build立和运行以达到发展的目的。 实际上在项目代码上工作并不是问题,因为它被开发人员克隆,但是npm install是通过docker和root来完成的。 这意味着repos中的node_modules属于root。 开发人员不能简单地执行npm install来向repo添加新的软件包,因为他们对node_modules没有权限,并且可能会根据主机系统使用不同的体系结构构build模块。 我曾想过创build一个在容器中运行npm install的脚本,但是这有一些注意事项: root会拥有package.json 这打破了一个典型的节点开发人员的stream程…他们习惯于做npm install 就像我上面所说的那样,整个过程就是尽可能的容易地进入和发展,所以我想尽可能接近一个共同的发展经验。 是否有任何build议来处理Docker容器中的节点模块的开发项目的安装?

权限问题与Docker和Mac OSX

我正在运行MacOSX 10.11,我最近试图dockerize我所有的项目。 我有一个问题,试图使用docker-compose来运行mongoDB + NodeJS应用程序。 这是我的docker-compose脚本: version: '2' services: mongodata: image: mongo:latest volumes: – "${APP_DB}:/data" command: "–break-mongo" mongo-app: image: mongo:latest volumes_from: – "mongodata" expose: – "27017" ports: – "27017:27017" command: "–smallfiles –dbpath /data" web: build: . volumes: – .:/usr/src/app ports: – "3000:3000" depends_on: – mongo-app links: – mongo-app environment: – PORT=3000 所以基本上我有一个容量只有容器,将坚持我的文件。 然后我根据这个音量运行mongo,然后运行我的NodeJS应用程序。 但每次我尝试运行docker-compose,我有以下错误: mongo-app_1 […]

Chokidar不在Docker容器内部进行文件更改

我正在使用docker for mac版本1.12.0-rc2作为反应项目。 我的工作stream程是: OS X上的src/文件夹被安装到容器中 当开发人员修改src/的文件时,会将其转换为ES5并置于public/ (此工作)。 当public/另一个观察者更改文件触发热重新加载(在我的本地主机,但不在容器中)。 这是我从第3步的步骤观察者代码: // root = "/src" const watcher = chokidar.watch(root, { usePolling: true, awaitWriteFinish: { pollInterval: 100, stabilityThreshold: 250 }, ignored: /\.(git|gz|map)|node_modules|jspm_packages|src/, ignoreInitial: true, persistent: true }) .on("change", function fileWatcher(filename) { const modulePath = filename.replace(`${root}/`, ""); wss.clients.forEach(function sendFileChange(client) { send("filechange", modulePath, client); }); if (cache[filename]) { wss.clients.forEach(function […]

docker-compose不能从npm中看到node_modules

我想我不是第一个有这个问题的人,但是我没有看到对我有用的东西。 docker-compose.yml文件 web: build: . volumes: – .:/src ports: – "3000:3000" Dockerfile FROM node:0.12 RUN npm install -g mocha RUN mkdir /src WORKDIR /src ADD package.json /src/package.json RUN npm install COPY . /src EXPOSE 3000 CMD node server.js Aand成功构build后通过docker-compose up运行,我有和错误: web_1 | Error: Cannot find module 'express' web_1 | at Function.Module._resolveFilename (module.js:336:15) web_1 | at […]

是否有可能从容器挂载到主机的文件夹?

作为一个例子,我有一个简单的Node.js / Typescript应用程序定义如下: Dockerfile FROM node:6.2 RUN npm install –global typings@1.3.1 COPY package.json /app/package.json WORKDIR /app RUN npm install COPY typings.json /app/typings.json RUN typings install 节点包和types已预先映像。 node_modules和node_modules文件夹默认情况下仅存在于正在运行的容器中。 泊坞窗,compose.yml node-app: … volumes: – .:/app – /app/node_modules – /app/typings 我将当前文件夹从主机安装到容器,从而创build来自/app现有文件夹的卷。 这些被安装回容器,以便应用程序可以使用它们。 问题是,我想在主机系统上看到typings文件夹作为一个只读文件夹(因为一些IDE可以显示你可以在这个文件夹中findtypes提示)。 从我testing的那些文件夹( node_modules和node_modules )在主机上创build后,我运行的容器,但他们总是空的。 只有在容器正在运行时,是否有可能以某种方式从容器卷中看到它们的内容(只读)?

docker组成“向上”与“运行”产生不同的挂载量

更新2:我已经在Git上创build了一个示例项目来重现此问题 。 经过进一步的testing,testing用例与我在原文中描述的略有不同。 我包括了我在下面的github仓库中写的自述文件的内容。 用例 一个简单的具有Dockerfile的nodejs项目。 上述项目使用的一个本地NPM依赖项(通过Dockerfile复制到容器中)。 该项目通过本地path引用依赖项。 nodejs项目有一个web路由( / ),它从package.json打印本地npm依赖项的版本。 这用于validationtesting用例过程的结果。 docker-compose使用这种卷技术将主机的源代码树覆盖在容器的源代码树上,然后将容器上的node_modules覆盖在第一个卷的顶部。 重现步骤 克隆这个回购 。 通过docker rm和docker rmi清理与此回购项目相关的任何以前的容器和图像。 看看test2_run1标签。 此状态表示使用本地NPM依赖项的1.0.0版本的项目。 做docker-compose build 。 如果正确执行了第2步,则所有步骤都应运行而不使用caching。 请注意npm install命令中本地NPM依赖的版本,例如+– my-npm@1.0.0 。 做一个docker-compose up 。 浏览到http://localhost:8000 。 该页面应报告版本1.0.0 。 停止正在运行的容器。 (在发出up命令的terminal上按Ctrl-C。) 看看test2_run2标签。 这会对NPM的index.js文件和package.json的版本index.js引入一个小的更改为1.0.1 。 做docker-compose build 。 只有COPY ./my-npm …的说明才能使用caching。 (例如,docker输出打印—> Using cache该指令。)所有后续步骤应由docker运行。 这是因为步骤7中引入的对NPM程序包COPY ./my-npm …的更改应已使COPY ./my-npm …命令的caching失效,并因此导致后续步骤失效。 […]

docker(撰写)和套接字io – 如何链接容器

我目前正在做一个项目,在那里我重做一个现有的项目,在docker集装箱中使用。 我有3个不同的容器: 一个nodejs服务器,它在端口3001上打开一个socket.io连接,并在端口3000上提供一个网页(也连接到该socket.io服务器) nodejs后端所需的MySQL数据库 一个通过socket.io发送数据到服务器的小应用程序 现在我试图链接这些容器,但是我不确定是否理解了dockernetworking。 我正确地认为在一个docker-compose.yml文件中: 端口:将端口暴露给主机(以及所有其他/所有链接的容器?) 链接:设置启动顺序,并允许一个容器使用者相互暴露的端口,hostname = containername 揭露:只暴露端口到所有链接的容器(不是主机,而不是未链接的容器) 所以我必须经常链接和揭露? 这是否总是工作在双向(socket.io消息可以发回)? 所以这样的事情是正确的(版本3格式): nodeserver: ports: -3000:3000 expose: -3001 links: -database … database: (image mysql…) application: links: -nodeserver … 现在应用程序和网页是否可以作为nodeserver:3000到达socket.io服务器? 我已经尝试了一些,但没有得到充分的工作,所以我想先确定一切。 谢谢你的帮助!

我需要运行两次docker-compose才没有错误

我正在学习在真实世界的开发环境中使用Docker,所以我使用Docker在Node.js中创build了一个非常简单的“Hello World”应用程序。 的package.json { "name": "docker-real-world", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC", "dependencies": { "express": "^4.14.0" } } server.js (应用程序的入口点): var express = require('express'); express() .get('/', function(req, res) { res.send('Success'); }) .listen(3000, function(err) { if (!err) { console.log('Server started') […]

Docker从npm install中编写名为volume&node_modules的v3

使用撰写v3。 在构build我复制package.json并运行npm安装到 /var/www/project/node_modules 我不添加任何代码在构build阶段。 在撰写我添加卷 – ./www:/var/www/project/www 众所周知,绑定到/ www的主机将有效地“覆盖”我在构build阶段安装的node_modules。 这就是为什么我们之后添加一个命名模块的原因 – ./www:/var/www/project/www – modules:/var/www/project/www/node_modules 这是我们第一次build设/运行项目时的正常工作 由于命名卷“模块”不存在,所以构build阶段的www / node_modules将被挂载。 但是 ,这是实际的问题。 下一次我对package.json进行更改并执行以下操作: docker-compose up –build 我可以看到新的npm模块是如何安装的,但是一旦连接了命名的“模块”卷(它现在存在上一次运行的东西),就会“覆盖”图像中新安装的模块。 上述添加一个命名卷的方法被build议在大量的地方作为节点模块问题的补救。 但据我所知,从很多testing中只能看到一次。 如果我每次更改package.json时都要重命名这个卷,那当然会起作用。

Node.js + Docker撰写:node_modules消失

我正在尝试使用Docker Compose将许多Node.js应用程序集成在开发环境中。 我遇到了一个问题,但是,与node_modules 。 这是发生了什么事情: npm install作为Dockerfile一部分运行。 我的本地目录中没有node_modules 。 (我不应该因为依赖关系的安装应该在容器中发生,对吗?这似乎打败了目的,否则,因为我需要在本地安装Node.js。) 在docker-compose.yml ,我使用源代码设置了一个volume 。 docker-compose build运行良好。 当我node_modules docker-compose up , node_modules目录在容器中消失 – 我假设因为卷被挂载,我没有在我的本地目录中。 我如何确保node_modules坚持到底? Dockerfile FROM node:0.10.37 COPY package.json /src/package.json WORKDIR /src RUN npm install -g grunt-cli && npm install COPY . /src EXPOSE 9001 CMD ["npm", "start"] docker-compose.yml api: build: . command: grunt links: – […]