Node.js docker compose与docker run-节点容器

Node.js docker compose与docker run-节点容器,node.js,docker,docker-compose,dockerfile,Node.js,Docker,Docker Compose,Dockerfile,我正在尝试为react应用程序设置容器。我的目标是使用docker compose(我想执行一个命令,让一切正常工作) 问题是,当我尝试使用docker compose和docker file(如下所示)执行此操作时,我得到的信息如下: docker compose.yml version: '2' services: react: build: ./images/react ports: - "3000:3000" volumes: - "/ho

我正在尝试为react应用程序设置容器。我的目标是使用
docker compose
(我想执行一个命令,让一切正常工作)

问题是,当我尝试使用docker compose和docker file(如下所示)执行此操作时,我得到的信息如下:

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 enoint enoint:没有这样的文件或目录,打开“/app/package.json”

但当我使用docker run和volumes映射进行操作时,我能够看到packages.json并运行npm install命令

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

为什么不使用docker compose?

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

运行
使用
-v/home/my/path:/app
清理容器映像时,实际上是首先装载目录,随后的
npm安装
调用将成功完成

如果要将应用程序(包括
package.json
)装入容器,则
npm安装需要在运行时(
CMD
)进行,而不是在构建时(
run

最简单的方法是将
npm install
语句添加到
CMD
指令中(并删除
runnpm install
指令):

CMD npm install && npm start