【问题标题】:docker compose vs docker run - node containerdocker compose vs docker run - 节点容器
【发布时间】:2017-03-06 16:35:09
【问题描述】:

我正在尝试为反应应用程序设置容器。我的目标是使用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" ]  

结果

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

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

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

为什么它不能与 docker compose 一起使用?

【问题讨论】:

    标签: node.js docker docker-compose dockerfile


    【解决方案1】:

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

    run-v /home/my/path:/app 匹配容器映像时,实际上是先挂载目录,随后的npm install 调用将成功完成。

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

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

    CMD npm install && npm start
    

    【讨论】:

      猜你喜欢
      • 2020-12-23
      • 2022-10-13
      • 2020-05-16
      • 2017-02-03
      • 2017-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多