在Dockerfile中运行yarn install时无法获取node_modules文件夹
test-sof
├── docker-compose.yml
├── Dockerfile
├── package.json
└── yarn.lock
泊坞窗,compose.yml
version: '3'
services:
web:
build: .
volumes:
- .:/myapp
的package.json
{
"name": "site",
"private": true,
"dependencies": {
"@rails/webpacker": "^3.2.1",
"babel-preset-react": "^6.24.1",
"prop-types": "^15.6.0",
"react": "^16.2.0",
"react-dom": "^16.2.0",
"reactjs": "^1.0.0",
"underscore": "^1.8.3"
},
"devDependencies": {
"webpack-dev-server": "^2.11.1"
}
}
Dockferfile
FROM ruby:2.5
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 libpq-dev nodejs yarn
RUN mkdir /myapp
WORKDIR /myapp
ADD ./package.json /myapp/
RUN yarn install
docker-compose build 时输出的步骤RUN纱线安装:
步骤6/6:RUN纱线安装
--->在3a0e7095ec81中运行
纱线安装v1.3.2
info找不到锁定文件 .
[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]建造新包装......
成功保存锁文件 .
于21.11s完成 .
拆除中间容器3a0e7095ec81
---> 5720579a0f2a
成功建成5720579a0f2a
成功标记了testsof_web:latest
运行命令: docker-compose run web bash 进入容器
root@11af1818e494:/myapp# ls
Dockerfile docker-compose.yml package.json
没有node_modules文件夹,但稍后在容器内运行时: yarn install output:
root @ 11af1818e494:/ myapp#yarn install
纱线安装v1.3.2
info找不到锁定文件 .
[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]建造新包装......
成功保存锁文件 .
于13.03完成 .
上市时:
root@11af1818e494:/myapp# ls
Dockerfile docker-compose.yml node_modules package.json yarn.lock
文件夹node_modules它存在 . 为什么?
1 回答
这部分
Dockerfile
安装纱线包:创建文件夹
/myapp
,复制package.json
并安装纱线包 . 构建成功,当然,node_modules
文件夹是内置图像 .但之后你开始构建图像:
这意味着
docker-compose.yaml
所在的文件夹的内容被安装到容器内的/myapp
文件夹中,因此它涵盖了容器的/myapp
文件夹的内容 .你不要't need to mount current folder to container'的文件夹来实现你想要的 . 只需从
docker-compose.yaml
删除它:现在你可以:
EDIT:
如果要实现上述目标,可以使用以下解决方法:
1. 您稍微修改
Dockerfile
:这意味着纱线包将在
/build
文件夹内部构建,并在容器启动后复制到/myapp
文件夹 .2. 您使用原始的
docker-compose.yaml
文件:当你启动
web
容器时:文件夹
node_modules
被复制到已装入的文件夹,即复制到主机上的.
文件夹 .3. 现在您可以启动任何容器,它将包含
/myapp
内的node_modules
文件夹:因此,您将能够通过以下方式实现目标: