首页 文章

docker compose vs docker run - 节点容器

提问于
浏览
2

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

问题是当我尝试使用docker-compose和docker文件(在下面)时,我得到的信息是:

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" ]

Result

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撰写?

1 回答

  • 5

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

    使用 -v /home/my/path:/app run ning容器映像时,实际上是先安装目录,后续的 npm install 调用将成功完成 .

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

    完成此操作的最简单方法是简单地将 npm install 语句添加到 CMD 指令(并删除 RUN npm install 指令):

    CMD npm install && npm start
    

相关问题