运行该步骤时运行纱线安装在 docker-compose build 命令期间的 Dockerfile 中,我得到:
[1/4] 正在解析包... [2/4] 正在获取包...信息[电子邮件受保护] /cdn-cgi/l/email-protection: 平台“linux”与该模块不兼容。
信息”[电子邮件受保护] /cdn-cgi/l/email-protection" 是可选依赖项并且失败
兼容性检查。将其从安装中排除。 [3/4] 链接
依赖项...警告“@rails/webpacker >[电子邮件受保护] /cdn-cgi/l/email-protection“ 有
未满足的对等依赖关系“caniuse-lite@^1.0.30000697”。警告>>[电子邮件受保护] /cdn-cgi/l/email-protection“具有未满足的对等依赖性”webpack@^2.2.0
|| ^3.0.0".警告"webpack-dev-server >[电子邮件受保护] /cdn-cgi/l/email-protection“具有未满足的同伴依赖性
“webpack@^1.0.0 || ^2.0.0 || ^3.0.0”。 [4/4] 构建新鲜包...
但未创建 node_modules 文件夹。另一方面,当我跑步时
docker-compose run SERVICE_NAME yarn install
I get:
[1/4] 正在解析包... [2/4] 正在获取包...信息[电子邮件受保护] /cdn-cgi/l/email-protection: 平台“linux”与该模块不兼容。
信息”[电子邮件受保护] /cdn-cgi/l/email-protection" 是可选依赖项并且失败
兼容性检查。将其从安装中排除。 [3/4] 链接
依赖项...警告“@rails/webpacker >[电子邮件受保护] /cdn-cgi/l/email-protection“ 有
未满足的对等依赖关系“caniuse-lite@^1.0.30000697”。警告>>[电子邮件受保护] /cdn-cgi/l/email-protection“具有未满足的对等依赖性”webpack@^2.2.0
|| ^3.0.0".警告"webpack-dev-server >[电子邮件受保护] /cdn-cgi/l/email-protection“具有未满足的同伴依赖性
“webpack@^1.0.0 || ^2.0.0 || ^3.0.0”。 [4/4] 构建新鲜包...
但然后文件夹节点模块它是在项目文件夹中创建的。
我只是不明白为什么......我期待相同的功能,但我错过了一些东西。
这是我的 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'
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
首先根据 Dockerfile 创建一个镜像:
- 获取图像
ruby:2.5
从中创建新图像
- 安装所有依赖项
- 创建文件夹
/app
- 将系统(项目目录)中的所有文件复制到图像的
/app
path
- Install
yarn
and bundle
(调用图像内的方法)
然后将您的项目文件夹“安装”到图像/app
文件夹,因此它与系统根文件夹相同。之后“生成”容器并执行CMD
来自 Docker 文件的命令(如果存在)。
记一个帐户这不是图像/容器生成流程的详细解释,但希望它可以帮助您解决您的问题。所以你可以
- 直接从容器运行代码(就像在 Dockerfile 中所做的那样)
- 或者不要将源代码复制到容器并将代码挂载为卷(就像您在 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
docker-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
构建和建立容器只需运行命令: sh run.sh
它将在您的系统中安装节点依赖项,然后创建容器,该容器/app
文件夹将是您的项目文件夹(在您的系统中),因此您的代码更改将立即生效。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)