【发布时间】:2015-07-14 15:35:55
【问题描述】:
我有一个包含以下服务的应用:
-
web/- 在端口 5000 上保存并运行 python 3 flask web 服务器。使用 sqlite3。 -
worker/- 有一个index.js文件,它是队列的工作人员。 Web 服务器使用 json API 通过端口9730与此队列交互。 worker 使用 redis 进行存储。工作人员还将数据本地存储在文件夹worker/images/中
现在这个问题只涉及worker。
worker/Dockerfile
FROM node:0.12
WORKDIR /worker
COPY package.json /worker/
RUN npm install
COPY . /worker/
docker-compose.yml
redis:
image: redis
worker:
build: ./worker
command: npm start
ports:
- "9730:9730"
volumes:
- worker/:/worker/
links:
- redis
当我运行 docker-compose build 时,一切都按预期运行,并且所有 npm 模块都安装在 /worker/node_modules 中,正如我所期望的那样。
npm WARN package.json unfold@1.0.0 No README data
> phantomjs@1.9.2-6 install /worker/node_modules/pageres/node_modules/screenshot-stream/node_modules/phantom-bridge/node_modules/phantomjs
> node install.js
<snip>
但是当我执行docker-compose up 时,我看到了这个错误:
worker_1 | Error: Cannot find module 'async'
worker_1 | at Function.Module._resolveFilename (module.js:336:15)
worker_1 | at Function.Module._load (module.js:278:25)
worker_1 | at Module.require (module.js:365:17)
worker_1 | at require (module.js:384:17)
worker_1 | at Object.<anonymous> (/worker/index.js:1:75)
worker_1 | at Module._compile (module.js:460:26)
worker_1 | at Object.Module._extensions..js (module.js:478:10)
worker_1 | at Module.load (module.js:355:32)
worker_1 | at Function.Module._load (module.js:310:12)
worker_1 | at Function.Module.runMain (module.js:501:10)
原来/worker/node_modules(在主机或容器中)中不存在任何模块。
如果在主机上,我npm install,那么一切正常。但我不想那样做。我希望容器处理依赖关系。
这里出了什么问题?
(不用说,所有的包都在package.json。)
【问题讨论】:
-
我认为你应该使用 ONBUILD 指令...像这样:github.com/nodejs/docker-node/blob/master/0.12/onbuild/…
-
当IDE不知道node_module依赖的情况下,如何在宿主机上进行开发?
-
尝试从
volumes: - worker/:/worker/文件中删除volumes: - worker/:/worker/块。此行会覆盖您使用 COPY 命令创建的文件夹。 -
When I run docker-compose build, everything works as expected and all npm modules are installed in /worker/node_modules as I'd expect.- 你是怎么检查的? -
@Vallie 您可以使用“docker run -it image_name sh”查看您使用“docker build”构建的镜像内容
标签: node.js docker ubuntu-14.04 docker-compose