Docker组成运行纱线安装

jj-*_*-aa 4 docker docker-compose yarnpkg

在docker-compose build命令期间运行步骤RUN yarn安装在Dockerfile中时,我得到:

[1/4]解析包... [2/4]获取包... info fsevents@1.1.3:平台"linux"与此模块不兼容.info"fsevents@1.1.3"是可选的依赖项和兼容性检查失败.从安装中排除它.[3/4]链接依赖关系...警告"@ rails/webpacker> postcss-cssnext@3.1.0"具有未满足的对等依赖关系"caniuse-lite@^1.0.30000697".警告"> webpack-dev-server@2.11.1"具有未满足的对等依赖"webpack@^2.2.0 || ^ 3.0.0".警告"webpack-dev-server> webpack-dev-middleware@1.12.2"具有未满足的对等依赖"webpack@^1.0.0 || ^ 2.0.0 || ^ 3.0.0".[4/4]建造新包装......

但是没有创建node_modules文件夹.另一方面,当我跑

docker-compose run SERVICE_NAME yarn install
Run Code Online (Sandbox Code Playgroud)

我明白了:

[1/4]解析包... [2/4]获取包... info fsevents@1.1.3:平台"linux"与此模块不兼容.info"fsevents@1.1.3"是可选的依赖项和兼容性检查失败.从安装中排除它.[3/4]链接依赖关系...警告"@ rails/webpacker> postcss-cssnext@3.1.0"具有未满足的对等依赖关系"caniuse-lite@^1.0.30000697".警告"> webpack-dev-server@2.11.1"具有未满足的对等依赖"webpack@^2.2.0 || ^ 3.0.0".警告"webpack-dev-server> webpack-dev-middleware@1.12.2"具有未满足的对等依赖"webpack@^1.0.0 || ^ 2.0.0 || ^ 3.0.0".[4/4]建造新包装......

但随后在项目文件夹中创建了文件夹node_modules.

我只是不明白为什么......我期待相同的功能,但我错过了一些东西.

这是我的docker-compose服务

services:
  ruby:
    build:
      context: .
      dockerfile: docker/ruby/Dockerfile
    networks:
      - some-network
    volumes:
      - .:/app
    ports:
      - "3000:3000"
    depends_on:
      - mysql
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
Run Code Online (Sandbox Code Playgroud)

Dockerfile

FROM ruby:2.5

# Install dependencies:
# - build-essential: To ensure certain gems can be compiled
# - nodejs: Compile assets
# - npm: Install node modules
# - yarn: Install & manage node modules [should make npm obsolete]
# - libpq-dev
RUN curl -sL https://deb.nodesource.com/setup_8.x | bash - && \
    curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \
    echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \
    apt-get update && \
    apt-get install -qq -y build-essential nodejs yarn \
    libpq-dev \
    mysql-client 

RUN mkdir /app
COPY . /app

WORKDIR /app

# install node dependencies
RUN yarn install

RUN bundle install
Run Code Online (Sandbox Code Playgroud)

Tar*_*yan 7

首先根据Dockerfile创建一个图像:

  1. 获取图像ruby:2.5以从中创建新图像
  2. 安装所有依赖项
  3. 创建文件夹 /app
  4. 将系统中的所有文件(项目目录)复制到图像的/app路径
  5. 安装yarnbundle(图片内部调用方法)

之后,将"项目"文件夹"安装"到图像的/app文件夹中,使其与系统根文件夹相同.之后"生成"容器并CMD从Docker文件执行命令(如果存在).

请注意,这不是图像/容器生成流程的详细说明,但希望它可以帮助您解决问题.所以你可以

  1. 直接从容器运行代码(就像在Dockerfile中一样)
  2. 或者不要将源代码复制到容器并将代码作为卷挂载(就像在docker-compose.yml中一样),并yarn install在系统中执行,或者使用安装命令创建入口点脚本:entrypoint: ./entrypoint.sh

文件示例

如果要"动态"更新源文件(要查看更新而不重建容器),必须使用第二种方式.

在项目目录中创建文件run.sh:

run.sh

#!/bin/sh

echo '--- run yarn install'
yarn install

echo '--- run bundle install'
bundle install

# HERE YOU CAN RUN ANY OTHER SCRIPT BEFORE CONTAINER BUILDING

echo '--- create docker image and up it'
sudo docker-compose up -d --build
Run Code Online (Sandbox Code Playgroud)

泊坞窗,compose.yml

无需改变(保持在您的问题中).

Dockerfile

FROM ruby:2.5

# Install dependencies:
# - build-essential: To ensure certain gems can be compiled
# - nodejs: Compile assets
# - npm: Install node modules
# - yarn: Install & manage node modules [should make npm obsolete]
# - libpq-dev
RUN curl -sL https://deb.nodesource.com/setup_8.x | bash - && \
    curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \
    echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \
    apt-get update && \
    apt-get install -qq -y build-essential nodejs yarn \
    libpq-dev \
    mysql-client 

WORKDIR /app
Run Code Online (Sandbox Code Playgroud)

要构建和启动容器,只需运行命令:sh run.sh

它将在您的系统中安装节点依赖项,之后将创建容器,该/app文件夹将是您的项目文件夹(在您的系统中),因此您的代码更改将立即生效.