【问题标题】:Why do node_modules keep disappearing from docker after build?为什么 node_modules 在构建后不断从 docker 中消失?
【发布时间】:2015-04-24 19:14:27
【问题描述】:

我正在模仿此处https://github.com/mjhea0/node-docker-workflow 的设置。使用 docker-compose 链接 2 个 docker 容器(node、redis)。

这是circle ci文件:

machine:
  services:
    - docker

dependencies:
  override:
    - sudo pip install -U docker-compose

test:
  override:
    - docker-compose run -d --no-deps node
    - cd node; npm test

这是我的节点 Dockerfile:

FROM dockerfile/nodejs

RUN mkdir /src

RUN npm install nodemon -g

WORKDIR /src
ADD . /src
RUN npm install

EXPOSE 3000

CMD npm start

测试不断失败,因为找不到chai。这是因为 node_modules 在构建完成后消失。

在 circle.yml 文件中的这两个步骤之间,node_modules 由 npm install 安装,然后在运行 npm test 命令时它们就消失了。

test:
  override:
    - docker-compose run -d --no-deps node
    - cd node; npm test

我不知道为什么会这样。由于我刚开始使用 Docker,有人可以(用外行的话)相当彻底地解释我上面使用的 repo 有什么问题,以及如何解决它。

谢谢!

【问题讨论】:

  • 如果没有这些额外的东西/废话,dockerfile 是否可以工作?如果你刚开始使用 docker,也许专注于 'docker' 部分本身。如果您定义了 VOLUME,它们不会持久存在。
  • 即使没有定义的卷,node_modules 似乎也无法持续足够长的时间。 docker-compose run -d --no-deps node 通过 npm install 构建和安装 node_modules,然后在运行 cd node; npm test 时,它们已经消失了。 ://

标签: javascript node.js continuous-integration docker circleci


【解决方案1】:

嗯,事实证明这是非常非常简单的事情,而且可能相当愚蠢/明显。

测试没有在容器内运行。

docker-compose run -d --no-deps node

这一行以分离模式运行容器。这意味着当下一个命令运行时,它会在容器外部运行。

要解决这个问题,只需删除-d,以便下一个命令在容器内运行。

docker-compose run --no-deps node

简单。

【讨论】:

    猜你喜欢
    • 2023-03-22
    • 2020-09-14
    • 2022-09-24
    • 1970-01-01
    • 2018-09-24
    • 2021-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多