Docker Compose,Rails和Webpacker没有持久化node_modules

时间:2018-01-29 16:41:08

标签: docker docker-compose yarn webpacker

TL; DR - yarn install在一个'中间容器中安装node_modules'并且在构建步骤之后包将消失。

我试图让我的dockerized rails 5.0应用程序使用webpacker。

Dockerfile

FROM our_company_centos_image:latest
RUN yum install wget -y
RUN wget https://dl.yarnpkg.com/rpm/yarn.repo -O /etc/yum.repos.d/yarn.repo
RUN yum install sqlite-devel yarn -y
RUN mkdir -p $APP_HOME/node_modules
COPY Gemfile Gemfile.lock package.json yarn.lock $APP_HOME/
RUN bundle install --path /bundle
RUN yarn install --pure-lockfile
ADD . $APP_HOME

当纱线安装运行时,它会安装软件包,然后立即安装

Removing intermediate container 67bcd62926d2

在容器之外,运行ls node_modules显示一个空目录,并且由于模块不存在而运行webpack_dev_server时,docker-compose up进程最终会失败。

我做过各种各样的事情链接将node_modules添加为docker-compose.yml中的一个卷,没有效果。

HAS唯一能做的就是在本地运行yarn install来构建目录,然后在目录中再次执行,但是后来我得到了OS X版本的软件包,最终可能会导致问题。

我在这里做错了什么?

搬运工-compose.yml

version: '2'
services:
  web:
    build: .
    network_mode: bridge
    environment:
      WEBPACK_DEV_SERVER_HOST: webpack_dev_server
    links:
      - webpack_dev_server
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - ./node_modules:/app/node_modules
      - .:/app
    ports:
      - "3000:3000"
    tty: true
    stdin_open: true
  webpack_dev_server:
    image: myapp_web
    network_mode: bridge
    command: bin/webpack-dev-server
    environment:
      NODE_ENV: development
      RAILS_ENV: development
      WEBPACK_DEV_SERVER_HOST: 0.0.0.0
    volumes:
      - .:/app
    ports:
      - "3035:3035"

3 个答案:

答案 0 :(得分:1)

最后一步是node_modules。您还提到本地树中的node_modules文件夹为空。这是否意味着node_modules仍然存在为空文件夹?

如果是这样,那么ADD空文件夹可能会在yarn步骤中被复制并覆盖在上一个 In file included from ../include/vrv/att.h:16: ../include/vrv/vrvdef.h:217:26: error: no member named 'tuple' in namespace 'std' typedef std::vector<std::tuple<Alignment *, Alignment *, int> > ArrayOfAdjustmentTuples; ~~~~~^ ../include/vrv/vrvdef.h:217:32: error: 'Alignment' does not refer to a value typedef std::vector<std::tuple<Alignment *, Alignment *, int> > ArrayOfAdjustmentTuples; ^ ../include/vrv/vrvdef.h:195:7: note: declared here class Alignment; ^ ../include/vrv/vrvdef.h:217:43: error: expected expression typedef std::vector<std::tuple<Alignment *, Alignment *, int> > ArrayOfAdjustmentTuples; ^ ../include/vrv/vrvdef.h:217:63: error: expected unqualified-id typedef std::vector<std::tuple<Alignment *, Alignment *, int> > ArrayOfAdjustmentTuples; ^ In file included from ../src/accid.cpp:17: ../include/vrv/functorparams.h:272:5: error: unknown type name 'ArrayOfAdjustmentTuples' ArrayOfAdjustmentTuples m_overlapingSyl; ^ 步骤中完成的所有内容。

答案 1 :(得分:0)

我有一个Rails 5.2.0.rc1应用,其中webpacker工作在https://github.com/archonic/limestone。它还不是100%正确,但我发现在docker-compose webpacker yarn install --pure-lockfile之前运行docker-compose up --build可以在新环境中运行并运行。我还不完全确定为什么在Dockerfile中需要它。

另据我所知,你的web卷应该是- '.:/app',而node_modules的语句是多余的。

答案 2 :(得分:0)

我发现的一种解决方案是将node_modules添加为卷。

例如,如果您的node_modules目录位于/usr/src/app/node_modules,只需添加:

volumes:
- /usr/src/app/node_modules