docker compose vs docker run - 节点容器

时间:2016-10-24 19:39:17

标签: node.js docker docker-compose dockerfile

我正在尝试设置反应应用的容器。我的目标是使用docker-compose(我想执行一个命令并使一切正常)

问题在于,当我尝试使用docker-compose和docker文件(位于下面)时,我会收到以下信息:

搬运工-compose.yml

version: '2'
services:
react:
    build: ./images/react
    ports:
      - "3000:3000"
    volumes:
      - "/home/my/path:/app"

Dockerfile

FROM node:6.9

WORKDIR /app

RUN npm install

EXPOSE 3000

CMD [ "npm", "start" ]  

结果

  

npm WARN enoent ENOENT:没有这样的文件或目录,打开'/app/package.json'

但是当我使用docker run和卷映射时,我能够看到packages.json并运行npm install命令。

docker run -it --rm -v /home/my/path:/app node:6.9 bash

为什么它不能使用docker compose?

1 个答案:

答案 0 :(得分:5)

请注意,您在docker-compose.yml文件中描述的卷将在运行时挂载,而不是在构建时挂载。这意味着在构建映像时,尚未存在任何package.json文件,您可以从中安装依赖项。

run使用-v /home/my/path:/app加载容器图像时,您实际上是先安装目录,后续npm install次调用将成功完成。

如果您打算将应用程序(包括package.json)安装到容器中,npm install需要在运行时(CMD)进行,而不是在构建时进行({{ 1}})。

实现此目的的最简单方法是简单地将RUN语句添加到npm install指令中(并删除CMD指令):

RUN npm install