我有一个具有以下服务的应用程序:
web/
-在端口5000上保存并运行python 3 flask网络服务器。使用sqlite3。worker/
-有一个index.js
文件,它是队列的工作程序。Web服务器使用json API通过端口与此队列进行交互9730
。工作人员使用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
。)
volumes: - worker/:/worker/
从docker-compose.yml
文件中删除块。此行将覆盖您使用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.
-你怎么检查的?